You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by GitBox <gi...@apache.org> on 2018/09/02 17:00:31 UTC

[GitHub] ZhuoSiChen closed pull request #126: Fix typo

ZhuoSiChen closed pull request #126: Fix typo
URL: https://github.com/apache/incubator-dubbo-website/pull/126
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/.gitignore b/.gitignore
index 4c972ab5..6f556b44 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@ _site
 .sass-cache
 Gemfile.lock
 *.gem
+.DS_Store
+*.pdf
diff --git a/DISCLAIMER b/DISCLAIMER
new file mode 100644
index 00000000..bed312a0
--- /dev/null
+++ b/DISCLAIMER
@@ -0,0 +1 @@
+Apache Dubbo is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
\ No newline at end of file
diff --git a/README.md b/README.md
index 9f98fa83..1de8d111 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,46 @@
-# The Official Site [dubbo.io](http://dubbo.io)
+# The Official Site for Apache Dubbo (incubating) [dubbo.incubator.apache.org](http://dubbo.incubator.apache.org)
+
+
+The source code of website is hosted under the asf-site branch. Make sure you are working on asf-site barnch before publishing the site.
+
+### Build the website
+
+If you are running the first time, make sure you run
+
+```sh
+cd script
+./bootstrap
+```
+
+Make sure you have installed jekyll and gitbook. To build the website locally
+
+```sh
+bundle exec jekyll build --config _config_build.yml
+```
+
+
+To start the server locally
+
+```sh
+cd script
+./deploy
+```
+
+And you can visit the website via http://localhost:8000
+
+
+### Publish the website
+
+Copy all the files from `_site` directory to the parent direcotry:
+
+```sh
+cp -r _site/* .
+```
+
+Make sure you have all the changed committed.
+
+```sh
+git push origin asf-site
+```
+
+
diff --git a/_config.yml b/_config.yml
index d5452570..ef9f1bed 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1,11 +1,11 @@
-title: DUBBO
-description: a high-performance, java based, open source RPC framework
+title: Apache Dubbo (incubating)
+description: Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.
 show_downloads: true
-google_analytics:
+google_analytics: UA-112489517-1
 theme: jekyll-theme-cayman
 github:
-    zip_url: https://github.com/alibaba/dubbo/zipball/master
-    tar_url: https://github.com/alibaba/dubbo/tarball/master
+    zip_url: https://www.apache.org/dyn/closer.cgi?path=incubator/dubbo/2.6.2/dubbo-incubating-2.6.2-source-release.zip
+    tar_url: https://github.com/apache/incubator-dubbo/tarball/master
     gitbook_url: books
-    repository_url: https://github.com/alibaba/dubbo
-    is_project_page: true
+    repository_url: https://github.com/apache/incubator-dubbo
+    is_project_page: true
\ No newline at end of file
diff --git a/_config_build.yml b/_config_build.yml
index d5452570..ef9f1bed 100644
--- a/_config_build.yml
+++ b/_config_build.yml
@@ -1,11 +1,11 @@
-title: DUBBO
-description: a high-performance, java based, open source RPC framework
+title: Apache Dubbo (incubating)
+description: Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.
 show_downloads: true
-google_analytics:
+google_analytics: UA-112489517-1
 theme: jekyll-theme-cayman
 github:
-    zip_url: https://github.com/alibaba/dubbo/zipball/master
-    tar_url: https://github.com/alibaba/dubbo/tarball/master
+    zip_url: https://www.apache.org/dyn/closer.cgi?path=incubator/dubbo/2.6.2/dubbo-incubating-2.6.2-source-release.zip
+    tar_url: https://github.com/apache/incubator-dubbo/tarball/master
     gitbook_url: books
-    repository_url: https://github.com/alibaba/dubbo
-    is_project_page: true
+    repository_url: https://github.com/apache/incubator-dubbo
+    is_project_page: true
\ No newline at end of file
diff --git a/_layouts/default.html b/_layouts/default.html
index 4cdeffba..45797c75 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -2,33 +2,33 @@
 <html lang="{{ site.lang | default: "en-US" }}">
   <head>
     <meta charset="UTF-8">
-
+    <title>{{ site.title }}</title>
 {% seo %}
     <meta name="description" content="{{ page.description | default: site.description | default: site.github.project_tagline }}"/>
     <meta name="viewport" content="width=device-width, initial-scale=1">
     <meta name="theme-color" content="#157878">
     <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
     <link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}">
-    <script>
-      var _hmt = _hmt || [];
-      (function() {
-        var hm = document.createElement("script");
-        hm.src = "https://hm.baidu.com/hm.js?5d37fba14b64e6bc8e0be39b4a08a59d";
-        var s = document.getElementsByTagName("script")[0]; 
-        s.parentNode.insertBefore(hm, s);
-      })();
-    </script>
+      <!--<script>-->
+      <!--var _hmt = _hmt || [];-->
+      <!--(function() {-->
+      <!--var hm = document.createElement("script");-->
+      <!--hm.src = "https://hm.baidu.com/hm.js?5d37fba14b64e6bc8e0be39b4a08a59d";-->
+      <!--var s = document.getElementsByTagName("script")[0]; -->
+      <!--s.parentNode.insertBefore(hm, s);-->
+      <!--})();-->
+      <!--</script>-->
   </head>
   <body>
     <section class="page-header">
-      <h1 class="project-name">{{ site.title | default: site.github.repository_name }}</h1>
+      <h1 class="project-name"><a href="http://www.apache.org"><img src="images//asf-feather.svg" title="Apache Software Foundation" alt="Apache Software Foundation" style="width: 50px;vertical-align: bottom;" /></a>{{ site.title | default: site.github.repository_name }}</h1>
       <h2 class="project-tagline">{{ site.description | default: site.github.project_tagline }}</h2>
       {% if site.github.is_project_page %}
         <a href="{{ site.github.repository_url }}" class="btn">View on GitHub</a>
       {% endif %}
       {% if site.show_downloads %}
         <a href="{{ site.github.zip_url }}" class="btn">Download .zip</a>
-        <a href="{{ site.github.tar_url }}" class="btn">Download .tar.gz</a>
+        <!--a href="{{ site.github.tar_url }}" class="btn">Download .tar.gz</a-->
       {% endif %}
     </section>
 
@@ -36,7 +36,7 @@ <h2 class="project-tagline">{{ site.description | default: site.github.project_t
       {{ content }}
 
       <footer class="site-footer">
-          <span class="site-footer-credits">&copy; 2012-2017 | dubbo team | visit <a href="https://www.aliyun.com/product/edas">enterprise edition</a> on <a href="https://www.alibabacloud.com"><img class="inline-image" src="images/aliyun.png"/></a></span>
+          <span class="site-footer-credits">Copyright © 2018 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</span>
       </footer>
     </section>
 
diff --git a/assets/css/style.css b/assets/css/style.css
new file mode 100644
index 00000000..199753d4
--- /dev/null
+++ b/assets/css/style.css
@@ -0,0 +1,320 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */
+html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
+
+/** Remove default margin. */
+body { margin: 0; }
+
+/* HTML5 display definitions ========================================================================== */
+/** Correct `block` display not defined for any HTML5 element in IE 8/9. Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. Correct `block` display not defined for `main` in IE 11. */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; }
+
+/** 1. Correct `inline-block` display not defined in IE 8/9. 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */
+audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ }
+
+/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */
+audio:not([controls]) { display: none; height: 0; }
+
+/** Address `[hidden]` styling not present in IE 8/9/10. Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */
+[hidden], template { display: none; }
+
+/* Links ========================================================================== */
+/** Remove the gray background color from active links in IE 10. */
+a { background-color: transparent; }
+
+/** Improve readability when focused and also mouse hovered in all browsers. */
+a:active, a:hover { outline: 0; }
+
+/* Text-level semantics ========================================================================== */
+/** Address styling not present in IE 8/9/10/11, Safari, and Chrome. */
+abbr[title] { border-bottom: 1px dotted; }
+
+/** Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */
+b, strong { font-weight: bold; }
+
+/** Address styling not present in Safari and Chrome. */
+dfn { font-style: italic; }
+
+/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari, and Chrome. */
+h1 { font-size: 2em; margin: 0.67em 0; }
+
+/** Address styling not present in IE 8/9. */
+mark { background: #ff0; color: #000; }
+
+/** Address inconsistent and variable font size in all browsers. */
+small { font-size: 80%; }
+
+/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+
+sup { top: -0.5em; }
+
+sub { bottom: -0.25em; }
+
+/* Embedded content ========================================================================== */
+/** Remove border when inside `a` element in IE 8/9/10. */
+img { border: 0; }
+
+/** Correct overflow not hidden in IE 9/10/11. */
+svg:not(:root) { overflow: hidden; }
+
+/* Grouping content ========================================================================== */
+/** Address margin not present in IE 8/9 and Safari. */
+figure { margin: 1em 40px; }
+
+/** Address differences between Firefox and other browsers. */
+hr { box-sizing: content-box; height: 0; }
+
+/** Contain overflow in all browsers. */
+pre { overflow: auto; }
+
+/** Address odd `em`-unit font size rendering in all browsers. */
+code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; }
+
+/* Forms ========================================================================== */
+/** Known limitation: by default, Chrome and Safari on OS X allow very limited styling of `select`, unless a `border` property is set. */
+/** 1. Correct color not being inherited. Known issue: affects color of disabled elements. 2. Correct font properties not being inherited. 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */
+button, input, optgroup, select, textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; /* 3 */ }
+
+/** Address `overflow` set to `hidden` in IE 8/9/10/11. */
+button { overflow: visible; }
+
+/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. Correct `select` style inheritance in Firefox. */
+button, select { text-transform: none; }
+
+/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ }
+
+/** Re-set default cursor for disabled elements. */
+button[disabled], html input[disabled] { cursor: default; }
+
+/** Remove inner padding and border in Firefox 4+. */
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+
+/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */
+input { line-height: normal; }
+
+/** It's recommended that you don't attempt to style these elements. Firefox's implementation doesn't respect box-sizing, padding, or width.  1. Address box sizing set to `content-box` in IE 8/9/10. 2. Remove excess padding in IE 8/9/10. */
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ }
+
+/** Fix the cursor style for Chrome's increment/decrement buttons. For certain `font-size` values of the `input`, it causes the cursor style of the decrement button to change from `default` to `text`. */
+input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; }
+
+/** 1. Address `appearance` set to `searchfield` in Safari and Chrome. 2. Address `box-sizing` set to `border-box` in Safari and Chrome (include `-moz` to future-proof). */
+input[type="search"] { -webkit-appearance: textfield; /* 1 */ /* 2 */ box-sizing: content-box; }
+
+/** Remove inner padding and search cancel button in Safari and Chrome on OS X. Safari (but not Chrome) clips the cancel button when the search input has padding (and `textfield` appearance). */
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+
+/** Define consistent border, margin, and padding. */
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+
+/** 1. Correct `color` not being inherited in IE 8/9/10/11. 2. Remove padding so people aren't caught out if they zero out fieldsets. */
+legend { border: 0; /* 1 */ padding: 0; /* 2 */ }
+
+/** Remove default vertical scrollbar in IE 8/9/10/11. */
+textarea { overflow: auto; }
+
+/** Don't inherit the `font-weight` (applied by a rule above). NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */
+optgroup { font-weight: bold; }
+
+/* Tables ========================================================================== */
+/** Remove most spacing between table cells. */
+table { border-collapse: collapse; border-spacing: 0; }
+
+td, th { padding: 0; }
+
+.highlight table td { padding: 5px; }
+
+.highlight table pre { margin: 0; }
+
+.highlight .cm { color: #999988; font-style: italic; }
+
+.highlight .cp { color: #999999; font-weight: bold; }
+
+.highlight .c1 { color: #999988; font-style: italic; }
+
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic; }
+
+.highlight .c, .highlight .cd { color: #999988; font-style: italic; }
+
+.highlight .err { color: #a61717; background-color: #e3d2d2; }
+
+.highlight .gd { color: #000000; background-color: #ffdddd; }
+
+.highlight .ge { color: #000000; font-style: italic; }
+
+.highlight .gr { color: #aa0000; }
+
+.highlight .gh { color: #999999; }
+
+.highlight .gi { color: #000000; background-color: #ddffdd; }
+
+.highlight .go { color: #888888; }
+
+.highlight .gp { color: #555555; }
+
+.highlight .gs { font-weight: bold; }
+
+.highlight .gu { color: #aaaaaa; }
+
+.highlight .gt { color: #aa0000; }
+
+.highlight .kc { color: #000000; font-weight: bold; }
+
+.highlight .kd { color: #000000; font-weight: bold; }
+
+.highlight .kn { color: #000000; font-weight: bold; }
+
+.highlight .kp { color: #000000; font-weight: bold; }
+
+.highlight .kr { color: #000000; font-weight: bold; }
+
+.highlight .kt { color: #445588; font-weight: bold; }
+
+.highlight .k, .highlight .kv { color: #000000; font-weight: bold; }
+
+.highlight .mf { color: #009999; }
+
+.highlight .mh { color: #009999; }
+
+.highlight .il { color: #009999; }
+
+.highlight .mi { color: #009999; }
+
+.highlight .mo { color: #009999; }
+
+.highlight .m, .highlight .mb, .highlight .mx { color: #009999; }
+
+.highlight .sb { color: #d14; }
+
+.highlight .sc { color: #d14; }
+
+.highlight .sd { color: #d14; }
+
+.highlight .s2 { color: #d14; }
+
+.highlight .se { color: #d14; }
+
+.highlight .sh { color: #d14; }
+
+.highlight .si { color: #d14; }
+
+.highlight .sx { color: #d14; }
+
+.highlight .sr { color: #009926; }
+
+.highlight .s1 { color: #d14; }
+
+.highlight .ss { color: #990073; }
+
+.highlight .s { color: #d14; }
+
+.highlight .na { color: #008080; }
+
+.highlight .bp { color: #999999; }
+
+.highlight .nb { color: #0086B3; }
+
+.highlight .nc { color: #445588; font-weight: bold; }
+
+.highlight .no { color: #008080; }
+
+.highlight .nd { color: #3c5d5d; font-weight: bold; }
+
+.highlight .ni { color: #800080; }
+
+.highlight .ne { color: #990000; font-weight: bold; }
+
+.highlight .nf { color: #990000; font-weight: bold; }
+
+.highlight .nl { color: #990000; font-weight: bold; }
+
+.highlight .nn { color: #555555; }
+
+.highlight .nt { color: #000080; }
+
+.highlight .vc { color: #008080; }
+
+.highlight .vg { color: #008080; }
+
+.highlight .vi { color: #008080; }
+
+.highlight .nv { color: #008080; }
+
+.highlight .ow { color: #000000; font-weight: bold; }
+
+.highlight .o { color: #000000; font-weight: bold; }
+
+.highlight .w { color: #bbbbbb; }
+
+.highlight { background-color: #f8f8f8; }
+
+* { box-sizing: border-box; }
+
+body { padding: 0; margin: 0; font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.5; color: #606c71; }
+
+a { color: #1e6bb8; text-decoration: none; }
+a:hover { text-decoration: underline; }
+
+.btn { display: inline-block; margin-bottom: 1rem; color: rgba(255, 255, 255, 0.7); background-color: rgba(255, 255, 255, 0.08); border-color: rgba(255, 255, 255, 0.2); border-style: solid; border-width: 1px; border-radius: 0.3rem; transition: color 0.2s, background-color 0.2s, border-color 0.2s; }
+.btn:hover { color: rgba(255, 255, 255, 0.8); text-decoration: none; background-color: rgba(255, 255, 255, 0.2); border-color: rgba(255, 255, 255, 0.3); }
+.btn + .btn { margin-left: 1rem; }
+@media screen and (min-width: 64em) { .btn { padding: 0.75rem 1rem; } }
+@media screen and (min-width: 42em) and (max-width: 64em) { .btn { padding: 0.6rem 0.9rem; font-size: 0.9rem; } }
+@media screen and (max-width: 42em) { .btn { display: block; width: 100%; padding: 0.75rem; font-size: 0.9rem; }
+  .btn + .btn { margin-top: 1rem; margin-left: 0; } }
+
+.page-header { color: #fff; text-align: center; background-color: #159957; background-image: linear-gradient(120deg, #155799, #159957); }
+@media screen and (min-width: 64em) { .page-header { padding: 5rem 6rem; } }
+@media screen and (min-width: 42em) and (max-width: 64em) { .page-header { padding: 3rem 4rem; } }
+@media screen and (max-width: 42em) { .page-header { padding: 2rem 1rem; } }
+
+.project-name { margin-top: 0; margin-bottom: 0.1rem; }
+@media screen and (min-width: 64em) { .project-name { font-size: 3.25rem; } }
+@media screen and (min-width: 42em) and (max-width: 64em) { .project-name { font-size: 2.25rem; } }
+@media screen and (max-width: 42em) { .project-name { font-size: 1.75rem; } }
+
+.project-tagline { margin-bottom: 2rem; font-weight: normal; opacity: 0.7; }
+@media screen and (min-width: 64em) { .project-tagline { font-size: 1.25rem; } }
+@media screen and (min-width: 42em) and (max-width: 64em) { .project-tagline { font-size: 1.15rem; } }
+@media screen and (max-width: 42em) { .project-tagline { font-size: 1rem; } }
+
+.main-content { word-wrap: break-word; }
+.main-content :first-child { margin-top: 0; }
+@media screen and (min-width: 64em) { .main-content { max-width: 64rem; padding: 2rem 6rem; margin: 0 auto; font-size: 1.1rem; } }
+@media screen and (min-width: 42em) and (max-width: 64em) { .main-content { padding: 2rem 4rem; font-size: 1.1rem; } }
+@media screen and (max-width: 42em) { .main-content { padding: 2rem 1rem; font-size: 1rem; } }
+.main-content img { max-width: 100%; }
+.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 { margin-top: 2rem; margin-bottom: 1rem; font-weight: normal; color: #159957; }
+.main-content p { margin-bottom: 1em; }
+.main-content code { padding: 2px 4px; font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 0.9rem; color: #567482; background-color: #f3f6fa; border-radius: 0.3rem; }
+.main-content pre { padding: 0.8rem; margin-top: 0; margin-bottom: 1rem; font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace; color: #567482; word-wrap: normal; background-color: #f3f6fa; border: solid 1px #dce6f0; border-radius: 0.3rem; }
+.main-content pre > code { padding: 0; margin: 0; font-size: 0.9rem; color: #567482; word-break: normal; white-space: pre; background: transparent; border: 0; }
+.main-content .highlight { margin-bottom: 1rem; }
+.main-content .highlight pre { margin-bottom: 0; word-break: normal; }
+.main-content .highlight pre, .main-content pre { padding: 0.8rem; overflow: auto; font-size: 0.9rem; line-height: 1.45; border-radius: 0.3rem; -webkit-overflow-scrolling: touch; }
+.main-content pre code, .main-content pre tt { display: inline; max-width: initial; padding: 0; margin: 0; overflow: initial; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; }
+.main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after { content: normal; }
+.main-content ul, .main-content ol { margin-top: 0; }
+.main-content blockquote { padding: 0 1rem; margin-left: 0; color: #819198; border-left: 0.3rem solid #dce6f0; }
+.main-content blockquote > :first-child { margin-top: 0; }
+.main-content blockquote > :last-child { margin-bottom: 0; }
+.main-content table { display: block; width: 100%; overflow: auto; word-break: normal; word-break: keep-all; -webkit-overflow-scrolling: touch; }
+.main-content table th { font-weight: bold; }
+.main-content table th, .main-content table td { padding: 0.5rem 1rem; border: 1px solid #e9ebec; }
+.main-content dl { padding: 0; }
+.main-content dl dt { padding: 0; margin-top: 1rem; font-size: 1rem; font-weight: bold; }
+.main-content dl dd { padding: 0; margin-bottom: 1rem; }
+.main-content hr { height: 2px; padding: 0; margin: 1rem 0; background-color: #eff0f1; border: 0; }
+
+.site-footer { padding-top: 2rem; margin-top: 2rem; border-top: solid 1px #eff0f1; }
+@media screen and (min-width: 64em) { .site-footer { font-size: 1rem; } }
+@media screen and (min-width: 42em) and (max-width: 64em) { .site-footer { font-size: 1rem; } }
+@media screen and (max-width: 42em) { .site-footer { font-size: 0.9rem; } }
+
+.site-footer-owner { display: block; font-weight: bold; }
+
+.site-footer-credits { color: #819198; }
+
+.inline-image { vertical-align: middle; }
diff --git a/books/dubbo-admin-book-en/index.html b/books/dubbo-admin-book-en/index.html
index c28328f5..2235fa8e 100644
--- a/books/dubbo-admin-book-en/index.html
+++ b/books/dubbo-admin-book-en/index.html
@@ -210,14 +210,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -287,7 +287,7 @@ <h1>
     
                                 <section class="normal markdown-section">
                                 
-                                <h1 id="dubbo-dev-book">dubbo-dev-book</h1>
+                                <h1 id="dubbo-admin-book">dubbo-admin-book</h1>
 <p>The installation and maintenance guidance of registry center and dubbo-admin.</p>
 
                                 
@@ -328,7 +328,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 install manual","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2017-12-26T02:28:19.999Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 install manual","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2018-03-19T06:46:50.795Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/admin-console.html b/books/dubbo-admin-book-en/install/admin-console.html
index 4af89419..67c33581 100644
--- a/books/dubbo-admin-book-en/install/admin-console.html
+++ b/books/dubbo-admin-book-en/install/admin-console.html
@@ -57,8 +57,6 @@
     <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
 
     
-    <link rel="next" href="../ops/introduction.html" />
-    
     
     <link rel="prev" href="simple-monitor-center.html" />
     
@@ -212,14 +210,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -292,12 +290,17 @@ <h1>
                                 <h1 id="install-admin-console">Install admin console</h1>
 <p>Include: route rule, dynamic configuration, service downgrade, access control, weight adjustment, load balance, etc.</p>
 <p>Install:</p>
-<pre><code class="lang-sh">wget http://apache.etoak.com/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz
+<pre><code class="lang-sh">wget https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz
 tar zxvf apache-tomcat-6.0.35.tar.gz
 <span class="hljs-built_in">cd</span> apache-tomcat-6.0.35
 rm -rf webapps/ROOT
-wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1.war
-unzip dubbo-admin-2.4.1.war <span class="hljs-_">-d</span> webapps/ROOT
+
+git <span class="hljs-built_in">clone</span> https://github.com/dubbo/dubbo-ops.git /var/tmp/dubbo-ops
+<span class="hljs-built_in">pushd</span> /var/tmp/dubbo-ops
+mvn clean package
+<span class="hljs-built_in">popd</span>
+
+unzip /var/tmp/dubbo-ops/dubbo-admin/target/dubbo-admin-2.0.0.war <span class="hljs-_">-d</span> webapps/ROOT
 </code></pre>
 <p>Configuration <sup><a href="#fn_1" id="reffn_1">1</a></sup>:</p>
 <pre><code class="lang-sh">vi webapps/ROOT/WEB-INF/dubbo.properties
@@ -347,15 +350,11 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
 
             
                 
-                <a href="simple-monitor-center.html" class="navigation navigation-prev " aria-label="Previous page: 1.6 install Simple monitor center">
+                <a href="simple-monitor-center.html" class="navigation navigation-prev navigation-unique" aria-label="Previous page: 1.6 install Simple monitor center">
                     <i class="fa fa-angle-left"></i>
                 </a>
                 
                 
-                <a href="../ops/introduction.html" class="navigation navigation-next " aria-label="Next page: 2 Ops manual">
-                    <i class="fa fa-angle-right"></i>
-                </a>
-                
             
         
     </div>
@@ -363,7 +362,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.7 install admin console","level":"1.2.7","depth":2,"next":{"title":"2 Ops manual","level":"1.3","depth":1,"path":"ops/introduction.md","ref":"ops/introduction.md","articles":[{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"previous":{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/admin-console.md","mtime":"2017-12-26T02:28:20.002Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.7 install admin console","level":"1.2.7","depth":2,"next":{"title":"2 Ops manual","level":"1.3","depth":1,"ref":"","articles":[{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"previous":{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/admin-console.md","mtime":"2018-05-14T09:24:13.930Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/consumer-demo.html b/books/dubbo-admin-book-en/install/consumer-demo.html
index 9f423751..2667510c 100644
--- a/books/dubbo-admin-book-en/install/consumer-demo.html
+++ b/books/dubbo-admin-book-en/install/consumer-demo.html
@@ -212,14 +212,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -291,38 +291,14 @@ <h1>
                                 
                                 <h1 id="install-demo-consumer">install demo consumer</h1>
 <p>install:</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-consumer/2.4.1/dubbo-demo-consumer-2.4.1-assembly.tar.gz
-tar zxvf dubbo-demo-consumer-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-demo-consumer-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo.git
+<span class="hljs-built_in">cd</span> incubator-dubbo
+Please start Provider first
+add -Djava.net.preferIPv4Stack=<span class="hljs-literal">true</span> <span class="hljs-keyword">if</span> your IDE is Intellij Idea
 </code></pre>
 <p>configuration:</p>
-<pre><code class="lang-sh">vi conf/dubbo.properties
-</code></pre>
-<p>start:</p>
-<pre><code class="lang-sh">./bin/start.sh
-tail <span class="hljs-_">-f</span> logs/stdout.log
-</code></pre>
-<p>Stop:</p>
-<pre><code class="lang-sh">./bin/stop.sh
-</code></pre>
-<p>Restart:</p>
-<pre><code class="lang-sh">./bin/restart.sh
-</code></pre>
-<p>Debug:</p>
-<pre><code class="lang-sh">./bin/start.sh debug
-</code></pre>
-<p>System status:</p>
-<pre><code class="lang-sh">./bin/dump.sh
-</code></pre>
-<p>General control entrance:</p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
-</code></pre>
-<p>Stdout:</p>
-<pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
+<pre><code class="lang-sh">resource/META-INFO.spring/dubbo-demo-consumer.xml
+change dubbo:registery to the real registery center address
 </code></pre>
 
                                 
@@ -367,7 +343,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"next":{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"previous":{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/consumer-demo.md","mtime":"2017-12-26T02:28:20.002Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"next":{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"previous":{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/consumer-demo.md","mtime":"2018-04-13T06:52:30.924Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/introduction.html b/books/dubbo-admin-book-en/install/introduction.html
index a7fc33af..26d32657 100644
--- a/books/dubbo-admin-book-en/install/introduction.html
+++ b/books/dubbo-admin-book-en/install/introduction.html
@@ -212,14 +212,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -341,7 +341,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1 install manual","level":"1.2","depth":1,"next":{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/introduction.md","mtime":"2017-12-26T02:28:20.003Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1 install manual","level":"1.2","depth":1,"next":{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/introduction.md","mtime":"2018-03-19T06:46:50.796Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/provider-demo.html b/books/dubbo-admin-book-en/install/provider-demo.html
index 99e21342..8efe9561 100644
--- a/books/dubbo-admin-book-en/install/provider-demo.html
+++ b/books/dubbo-admin-book-en/install/provider-demo.html
@@ -212,14 +212,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -291,48 +291,15 @@ <h1>
                                 
                                 <h1 id="install-demo-provider">install demo provider</h1>
 <p>install:</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-provider/2.4.1/dubbo-demo-provider-2.4.1-assembly.tar.gz
-tar zxvf dubbo-demo-provider-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-demo-provider-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo.git
+<span class="hljs-built_in">cd</span> incubator-dubbo
+run com.alibaba.dubbo.demo.provider.Provider under dubbo-demo-provider module
+add -Djava.net.preferIPv4Stack=<span class="hljs-literal">true</span> <span class="hljs-keyword">if</span> your IDE is Intellij Idea
 </code></pre>
 <p>configuration:</p>
-<pre><code class="lang-sh">vi conf/dubbo.properties
-</code></pre>
-<p>start:</p>
-<pre><code class="lang-sh">./bin/start.sh
-</code></pre>
-<p>stop:</p>
-<pre><code class="lang-sh">./bin/stop.sh
-</code></pre>
-<p>restart:</p>
-<pre><code class="lang-sh">./bin/restart.sh
-</code></pre>
-<p>Debug:</p>
-<pre><code class="lang-sh">./bin/start.sh debug
-</code></pre>
-<p>System status:</p>
-<pre><code class="lang-sh">./bin/dump.sh
-</code></pre>
-<p>General control entrance: </p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
-</code></pre>
-<p>Stdout:</p>
-<pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
-</code></pre>
-<p>Command line <sup><a href="#fn_1" id="reffn_1">1</a></sup>:</p>
-<pre><code class="lang-sh">telnet 127.0.0.1 20880
-<span class="hljs-built_in">help</span>
-</code></pre>
-<p>Or:</p>
-<pre><code class="lang-sh"><span class="hljs-built_in">echo</span> status | nc -i 1 127.0.0.1 20880
+<pre><code class="lang-sh">resource/META-INFO.spring/dubbo-demo-provider.xml
+change dubbo:registery to a real registery server address, zookeeper is recommanded
 </code></pre>
-<blockquote id="fn_1">
-<sup>1</sup>. Please refer to <a href="https://dubbo.gitbooks.io/dubbo-user-book/content/references/telnet.html" target="_blank">Telnet reference manual</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
-</blockquote>
 
                                 
                                 </section>
@@ -376,7 +343,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"next":{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"previous":{"title":"1 install manual","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/provider-demo.md","mtime":"2017-12-26T02:28:20.004Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"next":{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"previous":{"title":"1 install manual","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 install provider demo","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/provider-demo.md","mtime":"2018-04-13T06:52:30.925Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/redis.html b/books/dubbo-admin-book-en/install/redis.html
index f4f1975e..0e8b48a8 100644
--- a/books/dubbo-admin-book-en/install/redis.html
+++ b/books/dubbo-admin-book-en/install/redis.html
@@ -212,14 +212,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -290,11 +290,11 @@ <h1>
                                 <section class="normal markdown-section">
                                 
                                 <h1 id="install-redis-register-center">install Redis register center</h1>
-<p>Redis <sup><a href="#fn_1" id="reffn_1">1</a></sup> introductions, please refer to: <a href="https://dubbo.gitbooks.io/dubbo-user-book-en/content/references/registry/redis.html" target="_blank">Redis application center manual</a>&#x3002;</p>
-<p>you need an origin Redis server only, and change <code>dubbo.registry.addrss</code> to <code>redis://127.0.0.1:6379</code> in <code>conf/dubbo.properties</code> this file exits in Provider and Consumer here<a href="https://dubbo.gitbooks.io/dubbo-user-book/content/quick-start.html" target="_blank">quick start</a></p>
+<p>Redis <sup><a href="#fn_1" id="reffn_1">1</a></sup> introductions, please refer to: <a href="http://dubbo.apache.org/books/dubbo-user-book-en/references/registry/redis.html" target="_blank">Redis application center manual</a>&#x3002;</p>
+<p>you need an origin Redis server only, and change the value from <code>dubbo.registry.addrss</code> to <code>redis://127.0.0.1:6379</code> in <code>conf/dubbo.properties</code> of <a href="http://dubbo.apache.org/books/dubbo-user-book-en/quick-start.html" target="_blank">quick start</a></p>
 <p>Redis configuration center cluster <sup><a href="#fn_2" id="reffn_2">2</a></sup> write multiple server in client side and read from a single server.</p>
 <p>Install:</p>
-<pre><code class="lang-sh">wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz
+<pre><code class="lang-sh">wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/redis/redis-2.4.8.tar.gz
 tar xzf redis-2.4.8.tar.gz
 <span class="hljs-built_in">cd</span> redis-2.4.8
 make
@@ -370,7 +370,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"next":{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"previous":{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/redis.md","mtime":"2017-12-26T02:28:20.005Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"next":{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"previous":{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/redis.md","mtime":"2018-05-14T09:24:13.935Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/simple-monitor-center.html b/books/dubbo-admin-book-en/install/simple-monitor-center.html
index 52a0adf6..44b06939 100644
--- a/books/dubbo-admin-book-en/install/simple-monitor-center.html
+++ b/books/dubbo-admin-book-en/install/simple-monitor-center.html
@@ -212,14 +212,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -292,34 +292,35 @@ <h1>
                                 <h1 id="install-simple-monitor-center">install Simple monitor center</h1>
 <h2 id="step">Step</h2>
 <p>install:</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-monitor-simple/2.4.1/dubbo-monitor-simple-2.4.1-assembly.tar.gz
-tar zxvf dubbo-monitor-simple-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-monitor-simple-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo-ops
+<span class="hljs-built_in">cd</span> incubator-dubbo-ops &amp;&amp; mvn package
+<span class="hljs-built_in">cd</span> dubbo-monitor-simple/target &amp;&amp; tar xvf dubbo-monitor-simple-2.0.0-assembly.tar.gz
+<span class="hljs-built_in">cd</span> dubbo-monitor-simple-2.0.0
 </code></pre>
 <p>configuration:</p>
 <pre><code class="lang-sh">vi conf/dubbo.properties
 </code></pre>
 <p>start:</p>
-<pre><code class="lang-sh">./bin/start.sh
+<pre><code class="lang-sh">./assembly.bin/start.sh
 </code></pre>
 <p>stop:</p>
-<pre><code class="lang-sh">./bin/stop.sh
+<pre><code class="lang-sh">./assembly.bin/stop.sh
 </code></pre>
 <p>restart:</p>
-<pre><code class="lang-sh">./bin/restart.sh
+<pre><code class="lang-sh">./assembly.bin/restart.sh
 </code></pre>
 <p>debug:</p>
-<pre><code class="lang-sh">./bin/start.sh debug
+<pre><code class="lang-sh">./assembly.bin/start.sh debug
 </code></pre>
 <p>system status:</p>
-<pre><code class="lang-sh">./bin/dump.sh
+<pre><code class="lang-sh">./assembly.bin/dump.sh
 </code></pre>
 <p>General control entrance:</p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
+<pre><code class="lang-sh">./assembly.bin/server.sh start
+./assembly.bin/server.sh stop
+./assembly.bin/server.sh restart
+./assembly.bin/server.sh debug
+./assembly.bin/server.sh dump
 </code></pre>
 <p>Stdout:</p>
 <pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
@@ -339,7 +340,7 @@ <h2 id="notice">NOTICE</h2>
 Simple Monitor use disk to store statistics information, please focus on the limitation of your machine. Mount share disk is recommended if cluster is needed</p>
 <p>Charts directory must be in <code>jetty.directory</code>, or it can not be accessed by web page.</p>
 <blockquote id="fn_1">
-<sup>1</sup>. Please refer to <a href="https://dubbo.gitbooks.io/dubbo-user-book/content/references/telnet.html" target="_blank">Telnet command reference manual</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
+<sup>1</sup>. Please refer to <a href="http://dubbo.apache.org/books/dubbo-user-book-en/references/telnet.html" target="_blank">Telnet command reference manual</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
 </blockquote>
 
                                 
@@ -384,7 +385,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"next":{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"previous":{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-monitor-center.md","mtime":"2017-12-26T02:28:20.006Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"next":{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"previous":{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-monitor-center.md","mtime":"2018-04-13T06:52:30.926Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/simple-registry-center.html b/books/dubbo-admin-book-en/install/simple-registry-center.html
index 0dc89026..a583109d 100644
--- a/books/dubbo-admin-book-en/install/simple-registry-center.html
+++ b/books/dubbo-admin-book-en/install/simple-registry-center.html
@@ -212,14 +212,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -292,34 +292,35 @@ <h1>
                                 <h1 id="install-simple-configuration-center">install Simple configuration center</h1>
 <p>Simple Registry has not been well tested, may have bug, cluster is not supported, not recommended to use in production environment</p>
 <p>Install:</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-registry-simple/2.4.1/dubbo-registry-simple-2.4.1-assembly.tar.gz
-tar zxvf dubbo-registry-simple-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-registry-simple-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo-ops
+<span class="hljs-built_in">cd</span> incubator-dubbo-ops &amp;&amp; mvn package
+<span class="hljs-built_in">cd</span> dubbo-registry-simple/target &amp;&amp; tar xvf dubbo-registry-simple-2.0.0-assembly.tar.gz
+<span class="hljs-built_in">cd</span> dubbo-registry-simple-2.0.0
 </code></pre>
 <p>Configuration:</p>
 <pre><code class="lang-sh">vi conf/dubbo.properties
 </code></pre>
 <p>Start:</p>
-<pre><code class="lang-sh">./bin/start.sh
+<pre><code class="lang-sh">./assembly.bin/start.sh
 </code></pre>
 <p>Stop:</p>
-<pre><code class="lang-sh">./bin/stop.sh
+<pre><code class="lang-sh">./assembly.bin/stop.sh
 </code></pre>
 <p>Restart:</p>
-<pre><code class="lang-sh">./bin/restart.sh
+<pre><code class="lang-sh">./assembly.bin/restart.sh
 </code></pre>
 <p>Debug:</p>
-<pre><code class="lang-sh">./bin/start.sh debug
+<pre><code class="lang-sh">./assembly.bin/start.sh debug
 </code></pre>
 <p>System status:</p>
-<pre><code class="lang-sh">./bin/dump.sh
+<pre><code class="lang-sh">./assembly.bin/dump.sh
 </code></pre>
 <p>General control entrance: </p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
+<pre><code class="lang-sh">./assembly.bin/server.sh start
+./assembly.bin/server.sh stop
+./assembly.bin/server.sh restart
+./assembly.bin/server.sh debug
+./assembly.bin/server.sh dump
 </code></pre>
 <p>Stdout:</p>
 <pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
@@ -332,7 +333,7 @@ <h1 id="install-simple-configuration-center">install Simple configuration center
 <pre><code class="lang-sh"><span class="hljs-built_in">echo</span> status | nc -i 1 127.0.0.1 9090
 </code></pre>
 <blockquote id="fn_1">
-<sup>1</sup>. Please refer to <a href="https://dubbo.gitbooks.io/dubbo-user-book/content/references/telnet.html" target="_blank">Telnet command manual</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
+<sup>1</sup>. Please refer to <a href="http://dubbo.apache.org/books/dubbo-user-book-en/references/telnet.html" target="_blank">Telnet command manual</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
 </blockquote>
 
                                 
@@ -377,7 +378,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"next":{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"previous":{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-registry-center.md","mtime":"2017-12-26T02:28:20.006Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.5 install Simple configuration center","level":"1.2.5","depth":2,"next":{"title":"1.6 install Simple monitor center","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"previous":{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-registry-center.md","mtime":"2018-04-13T06:52:30.926Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/install/zookeeper.html b/books/dubbo-admin-book-en/install/zookeeper.html
index 96f3e57e..84c2e302 100644
--- a/books/dubbo-admin-book-en/install/zookeeper.html
+++ b/books/dubbo-admin-book-en/install/zookeeper.html
@@ -212,14 +212,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../ops/introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="../ops/introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -293,7 +293,7 @@ <h1 id="install-zookeeper-configuration-center">install Zookeeper configuration
 <p>zookeeper register center client version: <code>dubbo-2.3.3</code> and above<sup><a href="#fn_1" id="reffn_1">1</a></sup></p>
 <p>Dubbo changes nothing of Zookeeper&apos;s server side, an original Zookeeper server is fine. All change happens while calling Zookeeper&apos;s client side</p>
 <p>install:</p>
-<pre><code class="lang-sh">wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
+<pre><code class="lang-sh">wget http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
 tar zxvf zookeeper-3.3.3.tar.gz
 <span class="hljs-built_in">cd</span> zookeeper-3.3.3
 cp conf/zoo_sample.cfg conf/zoo.cfg
@@ -400,7 +400,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"next":{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"previous":{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/zookeeper.md","mtime":"2017-12-26T02:28:20.007Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.3 install Zookeeper configuration center","level":"1.2.3","depth":2,"next":{"title":"1.4 install Redis configuration center","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"previous":{"title":"1.2 install consumer demo","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/zookeeper.md","mtime":"2018-05-07T09:00:46.451Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/ops/dubbo-ops.html b/books/dubbo-admin-book-en/ops/dubbo-ops.html
index 3eb30e4c..e7ab24e5 100644
--- a/books/dubbo-admin-book-en/ops/dubbo-ops.html
+++ b/books/dubbo-admin-book-en/ops/dubbo-ops.html
@@ -58,8 +58,6 @@
 
     
     
-    <link rel="prev" href="introduction.html" />
-    
 
     </head>
     <body>
@@ -210,14 +208,14 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="introduction.html">
+        <li class="chapter " data-level="1.3" >
             
-                <a href="introduction.html">
+                <span>
             
                     
                     2 Ops manual
             
-                </a>
+                </span>
             
 
             
@@ -336,10 +334,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
 
             
                 
-                <a href="introduction.html" class="navigation navigation-prev navigation-unique" aria-label="Previous page: 2 Ops manual">
-                    <i class="fa fa-angle-left"></i>
-                </a>
-                
                 
             
         
@@ -348,7 +342,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"previous":{"title":"2 Ops manual","level":"1.3","depth":1,"path":"ops/introduction.md","ref":"ops/introduction.md","articles":[{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/dubbo-ops.md","mtime":"2017-12-26T02:28:20.007Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"previous":{"title":"2 Ops manual","level":"1.3","depth":1,"ref":"","articles":[{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/dubbo-ops.md","mtime":"2018-03-19T06:46:50.798Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:59.127Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/ops/introduction.html b/books/dubbo-admin-book-en/ops/introduction.html
index bb6112fc..6c00a052 100644
--- a/books/dubbo-admin-book-en/ops/introduction.html
+++ b/books/dubbo-admin-book-en/ops/introduction.html
@@ -333,7 +333,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"2 Ops manual","level":"1.3","depth":1,"next":{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]},"previous":{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/introduction.md","mtime":"2017-12-26T02:28:20.008Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:22.218Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"2 Ops manual","level":"1.3","depth":1,"next":{"title":"2.1 admin-console Ops","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]},"previous":{"title":"1.7 install admin console","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/introduction.md","mtime":"2018-01-25T00:56:11.117Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-01-25T01:21:11.094Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book-en/ops/introduction.md b/books/dubbo-admin-book-en/ops/introduction.md
new file mode 100644
index 00000000..c44f2b5b
--- /dev/null
+++ b/books/dubbo-admin-book-en/ops/introduction.md
@@ -0,0 +1 @@
+# Ops manual
\ No newline at end of file
diff --git a/books/dubbo-admin-book-en/search_index.json b/books/dubbo-admin-book-en/search_index.json
index 78dd3e03..14a81c54 100644
--- a/books/dubbo-admin-book-en/search_index.json
+++ b/books/dubbo-admin-book-en/search_index.json
@@ -1 +1 @@
-{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["admin.","book","center","dev","dubbo","guidanc","instal","introduct","mainten","registri"],"install/introduction.html":["1","1.","127.0.0.1","224.0.0.0","239.255.255.255","add","address","address,","balance.","broadcast","broadcast,","call","center","center,","chang","conf/dubbo.properti","configur","conflict,","consum","consumers.","cost","d","default","demo","depend","differ","directly.","directori","discoveri","display","dubbo.protocol.port","dubbo.registry.address","dubbo://127.0.0.1:9090","instal","installation,","instanc","instead","ip","issu","load","machin","machine'","machine,","manual","modifi","monitor","monitor,","multi","multicast","multicast://224.5.6.7:1234?unicast=false,","multipl","notice:","only,","part","port","provid","provider,","recommend","redi","registri","registry).","relationship,","run","same","send","set","simpl","so,","strategi","taken","time","two","type","under","unicast","unicast=false,","us","valu","verifi","zookeep","zookeeper://127.0.0.1:2181(redis://127.0.0.1:6379","↩"],"install/provider-demo.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1","1.","1.1","127.0.0.1","1:","2.4.1","20880","assembly.tar.gz","cd","command","conf/dubbo.properti","configuration:","control","debug","debug:","demo","dubbo","dump","echo","entrance:","f","gener","help","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","instal","install:","line","logs/stdout.log","manual","nc","or:","pleas","provid","provider/2.4.1/dubbo","refer","restart","restart:","start","start:","statu","status:","stdout:","stop","stop:","system","tail","tar","telnet","vi","wget","zxvf","|","↩"],"install/consumer-demo.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1.2","2.4.1","assembly.tar.gz","cd","conf/dubbo.properti","configuration:","consum","consumer/2.4.1/dubbo","control","debug","debug:","demo","dubbo","dump","entrance:","f","gener","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","instal","install:","logs/stdout.log","restart","restart:","start","start:","status:","stdout:","stop","stop:","system","tail","tar","vi","wget","zxvf"],"install/zookeeper.html":["./bin/zkserver.sh","1","1,","1.","1.3","127.0.0.1","2.","2.3.3","2181","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","4.","4:","5.","5:","above1","address","apach","below","call","cd","center","chang","client","clientport=2181","cluster","command","conf/zoo.cfg","conf/zoo_sample.cfg","configur","configuration:","content","cp","data","datadir","datadir=/home/dubbo/zookeep","directori","dubbo","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dump","echo","environment.","file","fine.","first","hadoop.a","happen","http://www.apache.org/dist//zookeeper/zookeep","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","inform","initlimit=10","instal","install:","line","machin","mkdir","myid","nc","needed,","noth","number","one'","or:","origin","output","product","project","put","real","recommend","regist","robust,","second","server","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","side","side,","start","start:","stop","stop:","sub","synclimit=5","tar","telnet","ticktime=2000","us","usage:","version:","vi","wget","zoo.cfg","zoo.cfg.","zookeep","zookeeper'","zxvf","|","↩"],"install/redis.html":["&","./src/redi","/dubbo/com.foo.barservice/provid","1","1.","1.4","127.0.0.1","2","2.","2.1.0","2.4.8","2.4.8.tar.gz","3.","3:","6379","applic","cd","center","chang","cli","client","cluster","command","conf/dubbo.properti","configur","configuration:","consum","dubbo.registry.addrss","exit","file","herequick","hgetal","high","higher","http://redis.googlecode.com/files/redi","http://redis.io/command","http://redis.io/topics/quickstart","instal","install:","introductions,","killal","kv","line","make","manual。","multipl","need","nohup","only,","or:","origin","perform","pleas","provid","read","redi","redis.conf","redis://127.0.0.1:6379","refer","regist","server","server,","server.","side","singl","start","start:","stop:","store","support","tar","telnet","to:","version","vi","wget","write","xzf","↩"],"install/simple-registry-center.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1","1.","1.5","127.0.0.1","1:","2.4.1","9090","assembly.tar.gz","bug,","cd","center","cluster","command","conf/dubbo.properti","configur","configuration:","control","debug","debug:","dubbo","dump","echo","entrance:","environ","f","gener","help","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","instal","install:","line","logs/stdout.log","manual","nc","or:","pleas","product","recommend","refer","registri","restart","restart:","simpl","simple/2.4.1/dubbo","start","start:","statu","status:","stdout:","stop","stop:","supported,","system","tail","tar","telnet","tested,","us","vi","well","wget","zxvf","|","↩"],"install/simple-monitor-center.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1","1.","1.6","127.0.0.1","1:","2.4.1","7070","access","assembly.tar.gz","cd","center","chart","cluster","command","conf/dubbo.properti","configuration:","consum","control","debug","debug:","directori","disk","dubbo","dump","echo","effect","entrance:","environ","f","failur","focu","gener","help","http://127.0.0.1:8080","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","information,","instal","install:","jetty.directory,","limit","line","logs/stdout.log","machine.","manual","monitor","mount","nc","need","notic","or:","page.","pleas","product","provider'","recommend","refer","restart","restart:","risk","running,","share","simpl","simple/2.4.1/dubbo","start","start:","statist","statu","status:","stdout:","step","stop","stop:","store","system","tail","tar","telnet","therefor","us","vi","visit:","web","wget","zxvf","|","↩"],"install/admin-console.html":["./bin/shutdown.sh","./bin/startup.sh","1.","1.7","1:","2.","2.4.1.war","2:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","access","adjustment,","admin","admin/2.4.1/dubbo","apach","balance,","cd","configur","configuration,","consol","control,","current","d","directori","downgrade,","dubbo","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.properti","dubbo.registry.address=zookeeper://127.0.0.1:2181","dynam","etc.","guest","guest,","http://127.0.0.1:8080/","http://apache.etoak.com/tomcat/tomcat","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","include:","inf/dubbo.properti","instal","install:","load","password:","put","rf","rm","root","root,","rout","rule,","servic","start:","stop:","tar","tomcat","unzip","user","user:","vi","visit","webapps/root","webapps/root/web","weight","wget","zxvf","↩"],"ops/introduction.html":["2","manual","op"],"ops/dubbo-ops.html":["2.1","access","add","adjust","admin","applic","balanc","configur","consol","consum","control","downgrad","dubbo","dynam","first","it'","load","manag","need","op","open","owner","page","provid","regist","rout","rule","search","servic","service,","weight"]},"length":11},"tokenStore":{"root":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":3.333333333333333},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},".":{"1":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.5}}},"2":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.5}}},"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2}}},"4":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":2}}},"5":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2}}},"6":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2}}},"7":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.5}}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"2":{"0":{"8":{"8":{"0":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}},"2":{"4":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"3":{"9":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"ops/introduction.html":{"ref":"ops/introduction.html","tf":3.333333333333333}},".":{"1":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.5}},".":{"0":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},"docs":{}}},"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}}},"4":{"docs":{},".":{"1":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.038461538461538464},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.05084745762711865},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.03333333333333333},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.025423728813559324}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}}}}}},"8":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}},"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"4":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"5":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},"docs":{}},"docs":{}},"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"/":{"docs":{},"v":{"6":{"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}}},"7":{"0":{"7":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}},"docs":{}},"docs":{}},"docs":{}},"9":{"0":{"9":{"0":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.537974683544304},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.5}},".":{"docs":{"./":{"ref":"./","tf":0.1}}},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}},"j":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03389830508474576},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}}}}}}}}}}}}}}},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.1}}}}},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}},"u":{"docs":{},"g":{"docs":{},",":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112}}}}}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.1},"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0129032258064514},"install/redis.html":{"ref":"install/redis.html","tf":2.0288461538461537},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.011111111111111},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.0084745762711864}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"r":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.03076923076923077},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0064516129032257},"install/redis.html":{"ref":"install/redis.html","tf":2.0096153846153846},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.011111111111111},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"t":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.038461538461538464},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.5677966101694913},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}},"o":{"docs":{},"l":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.5126582278481013},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.520408163265306}}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226}}}}}}},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}}}}}}},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}},"l":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}},"e":{"docs":{},"v":{"docs":{"./":{"ref":"./","tf":0.1}}},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.06153846153846154},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.564102564102564},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.584745762711864}}}},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03389830508474576},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.2},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03389830508474576},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}},"=":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},"?":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"9":{"0":{"9":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"m":{"docs":{},"p":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}},"i":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"k":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},"=":{"docs":{},"/":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}}}}}}},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"./":{"ref":"./","tf":0.1}}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.1},"install/introduction.html":{"ref":"install/introduction.html","tf":3.356410256410256},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.5128205128205128},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.516949152542373},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0064516129032257},"install/redis.html":{"ref":"install/redis.html","tf":2.0096153846153846},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.011111111111111},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.0084745762711864},"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.5126582278481013}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}},"n":{"docs":{},"c":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":10}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},",":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"1":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"t":{"docs":{},"'":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.1}}}}}}},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},"e":{"docs":{},"'":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},".":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}},"n":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":3.3410256410256407},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"ops/introduction.html":{"ref":"ops/introduction.html","tf":3.833333333333333}},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"a":{"docs":{},"g":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.061224489795918366}}}}},"k":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.059322033898305}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.038461538461538464}},":":{"docs":{},"/":{"docs":{},"/":{"2":{"2":{"4":{"docs":{},".":{"5":{"docs":{},".":{"6":{"docs":{},".":{"7":{"docs":{},":":{"1":{"2":{"3":{"4":{"docs":{},"?":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}},"k":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}},"y":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.01935483870967742}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"r":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.1},"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.05555555555555555}}},"y":{"docs":{},")":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}},"d":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/redis.html":{"ref":"install/redis.html","tf":2.0865384615384617}},"s":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"h":{"docs":{},"i":{"docs":{},"p":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564},"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}},"a":{"docs":{},"l":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"u":{"docs":{},"n":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.038461538461538464}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}},"l":{"docs":{},"e":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}},"o":{"docs":{},"b":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}},"u":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}}}}},"i":{"docs":{},"s":{"docs":{},"k":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}},"f":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}},"m":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03389830508474576},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},"e":{"docs":{},":":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"h":{"docs":{},"u":{"docs":{},"p":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"c":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}},"e":{"docs":{},"e":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"e":{"docs":{},"'":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}},"r":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}},"i":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}},"p":{"docs":{"ops/introduction.html":{"ref":"ops/introduction.html","tf":3.833333333333333},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.520408163265306}},"e":{"docs":{},"n":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}},"w":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"g":{"docs":{},"e":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.14285714285714285}},".":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.551282051282051},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}},"'":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}}}}},"u":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226},"install/redis.html":{"ref":"install/redis.html","tf":0.038461538461538464}},".":{"1":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},",":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"i":{"docs":{},"c":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.12244897959183673}},"e":{"docs":{},",":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.0555555555555554},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.0508474576271185}},"e":{"docs":{},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}},"d":{"docs":{},"e":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"o":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}},"t":{"docs":{},"u":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},"s":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"o":{"docs":{},"p":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}},"r":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}},"e":{"docs":{},"p":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}}}}}}}}}},"u":{"docs":{},"b":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"t":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"i":{"docs":{},"l":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03389830508474576},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}},"r":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"c":{"docs":{},"k":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"2":{"0":{"0":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"w":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}}}}},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112}}}}}}}},"o":{"docs":{},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848}}},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0379746835443038}}}}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}}}},"z":{"docs":{},"i":{"docs":{},"p":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}},"e":{"docs":{},"r":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}},"i":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}},":":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0387096774193547}},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}},"'":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.01935483870967742}},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}},"x":{"docs":{},"v":{"docs":{},"f":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}},"↩":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.03225806451612903},"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.0641025641025641},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.0847457627118644},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.05555555555555555},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.0423728813559322}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02564102564102564},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03389830508474576},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.022222222222222223},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01694915254237288}}}}},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}},"h":{"docs":{},"u":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}},"z":{"docs":{},"k":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}}},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"t":{"docs":{},"c":{"docs":{},".":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}},"f":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03389830508474576},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"n":{"docs":{},"e":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"u":{"docs":{},"r":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"8":{"0":{"8":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},"/":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"m":{"docs":{},"v":{"docs":{},"n":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"w":{"docs":{},"w":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},"/":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"a":{"docs":{},"k":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"o":{"docs":{},"o":{"docs":{},"p":{"docs":{},".":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"e":{"docs":{},"r":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}},"w":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.01694915254237288},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112}}}},"b":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02531645569620253}},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.012658227848101266},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}}},"|":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.01282051282051282},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.011111111111111112},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}},"&":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}},"v":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"x":{"docs":{},"z":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.00847457627118644}}}}}}}}}}}}}}}}}}},"length":634},"corpusTokens":["&","./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/shutdown.sh","./bin/start.sh","./bin/startup.sh","./bin/stop.sh","./bin/zkserver.sh","./src/redi","/dubbo/com.foo.barservice/provid","1","1,","1.","1.1","1.2","1.3","1.4","1.5","1.6","1.7","127.0.0.1","1:","2","2.","2.1","2.1.0","2.3.3","2.4.1","2.4.1.war","2.4.8","2.4.8.tar.gz","20880","2181","224.0.0.0","239.255.255.255","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","4.","4:","5.","5:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","6379","7070","9090","above1","access","add","address","address,","adjust","adjustment,","admin","admin.","admin/2.4.1/dubbo","apach","applic","assembly.tar.gz","balanc","balance,","balance.","below","book","broadcast","broadcast,","bug,","call","cd","center","center,","chang","chart","cli","client","clientport=2181","cluster","command","conf/dubbo.properti","conf/zoo.cfg","conf/zoo_sample.cfg","configur","configuration,","configuration:","conflict,","consol","consum","consumer/2.4.1/dubbo","consumers.","content","control","control,","cost","cp","current","d","data","datadir","datadir=/home/dubbo/zookeep","debug","debug:","default","demo","depend","dev","differ","directly.","directori","discoveri","disk","display","downgrad","downgrade,","dubbo","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.properti","dubbo.protocol.port","dubbo.registry.address","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dubbo.registry.address=zookeeper://127.0.0.1:2181","dubbo.registry.addrss","dubbo://127.0.0.1:9090","dump","dynam","echo","effect","entrance:","environ","environment.","etc.","exit","f","failur","file","fine.","first","focu","gener","guest","guest,","guidanc","hadoop.a","happen","help","herequick","hgetal","high","higher","http://127.0.0.1:8080","http://127.0.0.1:8080/","http://apache.etoak.com/tomcat/tomcat","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","http://redis.googlecode.com/files/redi","http://redis.io/command","http://redis.io/topics/quickstart","http://www.apache.org/dist//zookeeper/zookeep","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","include:","inf/dubbo.properti","inform","information,","initlimit=10","instal","install:","installation,","instanc","instead","introduct","introductions,","ip","issu","it'","jetty.directory,","killal","kv","limit","line","load","logs/stdout.log","machin","machine'","machine,","machine.","mainten","make","manag","manual","manual。","mkdir","modifi","monitor","monitor,","mount","multi","multicast","multicast://224.5.6.7:1234?unicast=false,","multipl","myid","nc","need","needed,","nohup","noth","notic","notice:","number","one'","only,","op","open","or:","origin","output","owner","page","page.","part","password:","perform","pleas","port","product","project","provid","provider'","provider,","provider/2.4.1/dubbo","put","read","real","recommend","redi","redis.conf","redis://127.0.0.1:6379","refer","regist","registri","registry).","relationship,","restart","restart:","rf","risk","rm","robust,","root","root,","rout","rule","rule,","run","running,","same","search","second","send","server","server,","server.","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","servic","service,","set","share","side","side,","simpl","simple/2.4.1/dubbo","singl","so,","start","start:","statist","statu","status:","stdout:","step","stop","stop:","store","strategi","sub","support","supported,","synclimit=5","system","tail","taken","tar","telnet","tested,","therefor","ticktime=2000","time","to:","tomcat","two","type","under","unicast","unicast=false,","unzip","us","usage:","user","user:","valu","verifi","version","version:","vi","visit","visit:","web","webapps/root","webapps/root/web","weight","well","wget","write","xzf","zoo.cfg","zoo.cfg.","zookeep","zookeeper'","zookeeper://127.0.0.1:2181(redis://127.0.0.1:6379","zxvf","|","↩"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"dubbo-dev-book\nThe installation and maintenance guidance of registry center and dubbo-admin.\n"},"install/introduction.html":{"url":"install/introduction.html","title":"1 install manual","keywords":"","body":"Install manual\nYou can run Demo Provider and Demo Consumer only, the default discovery strategy is Multicast by configuration center broadcast, do not run the two parts on the same machine, if you have to do so, set unicast=false, like multicast://224.5.6.7:1234?unicast=false, or the unicast send to consumer will be taken by provider, and the same for consumers. Only multicast has this issue\nYou can run multiple Demo Provider and Demo consumer to verify load balance. Demo Consumer can run multi instance directly. Because of port conflict, you can either run multi Demo Providers on different machines or modify the value of dubbo.protocol.port in conf/dubbo.properties under the install directory of conf/dubbo.properties\nYou can add Simple Monitor as a monitor center, the default discovery strategy is Multicast by configuration center broadcast, display the dependency relationship, call times and cost\nYou can use Zookeeper instead of Multicast as the configuration center, after Zookeeper Registry installation, modify conf/dubbo.properties under the installation directory of Demo Provider, Demo Consumer and Simple Monitor, change the value of dubbo.registry.address to zookeeper://127.0.0.1:2181(redis://127.0.0.1:6379 for Redis Registry). the value for Simple Registry is dubbo://127.0.0.1:9090\nZookeeper configuration address is recommended\n\n1. NOTICE: multicast can be neither 127.0.0.1 nor the machine's IP address, it must be a type D broadcast address, from 224.0.0.0 to 239.255.255.255 ↩\n\n"},"install/provider-demo.html":{"url":"install/provider-demo.html","title":"1.1 install provider demo","keywords":"","body":"install demo provider\ninstall:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-provider/2.4.1/dubbo-demo-provider-2.4.1-assembly.tar.gz\ntar zxvf dubbo-demo-provider-2.4.1-assembly.tar.gz\ncd dubbo-demo-provider-2.4.1\n\nconfiguration:\nvi conf/dubbo.properties\n\nstart:\n./bin/start.sh\n\nstop:\n./bin/stop.sh\n\nrestart:\n./bin/restart.sh\n\nDebug:\n./bin/start.sh debug\n\nSystem status:\n./bin/dump.sh\n\nGeneral control entrance: \n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\nStdout:\ntail -f logs/stdout.log\n\nCommand line 1:\ntelnet 127.0.0.1 20880\nhelp\n\nOr:\necho status | nc -i 1 127.0.0.1 20880\n\n\n1. Please refer to Telnet reference manual ↩\n\n"},"install/consumer-demo.html":{"url":"install/consumer-demo.html","title":"1.2 install consumer demo","keywords":"","body":"install demo consumer\ninstall:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-consumer/2.4.1/dubbo-demo-consumer-2.4.1-assembly.tar.gz\ntar zxvf dubbo-demo-consumer-2.4.1-assembly.tar.gz\ncd dubbo-demo-consumer-2.4.1\n\nconfiguration:\nvi conf/dubbo.properties\n\nstart:\n./bin/start.sh\ntail -f logs/stdout.log\n\nStop:\n./bin/stop.sh\n\nRestart:\n./bin/restart.sh\n\nDebug:\n./bin/start.sh debug\n\nSystem status:\n./bin/dump.sh\n\nGeneral control entrance:\n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\nStdout:\ntail -f logs/stdout.log\n\n"},"install/zookeeper.html":{"url":"install/zookeeper.html","title":"1.3 install Zookeeper configuration center","keywords":"","body":"install Zookeeper configuration center\nzookeeper register center client version: dubbo-2.3.3 and above1\nDubbo changes nothing of Zookeeper's server side, an original Zookeeper server is fine. All change happens while calling Zookeeper's client side\ninstall:\nwget http://www.apache.org/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz\ntar zxvf zookeeper-3.3.3.tar.gz\ncd zookeeper-3.3.3\ncp conf/zoo_sample.cfg conf/zoo.cfg\n\nconfiguration:\nvi conf/zoo.cfg\n\nIf cluster is not needed, the content of zoo.cfg is as below 2: \ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\n\nIf cluster is needed, the content of zoo.cfg is as below 3: \ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\nserver.1=10.20.153.10:2555:3555\nserver.2=10.20.153.11:2555:3555\n\nPut myid file in data directory 4:\nmkdir data\nvi myid\n\nMyid is the number after server in zoo.cfg. The first one's content is 1, the second one's content is 2:\n1\nStart:\n./bin/zkServer.sh start\n\nStop:\n./bin/zkServer.sh stop\n\nCommand line 5: \ntelnet 127.0.0.1 2181\ndump\n\nOr:\necho dump | nc 127.0.0.1 2181\n\nUsage:\ndubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181\n\nOr:\n\n\n\n1. Zookeeper is a sub project of Apache Hadoop.As it is robust, we recommend to use in production environment. ↩\n\n\n2. Data directory should be changed into your real output directory ↩\n\n\n3. Data directory and server address should be changed into your real machine information ↩\n\n\n4. dataDir in zoo.cfg ↩\n\n\n5. http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html ↩\n\n"},"install/redis.html":{"url":"install/redis.html","title":"1.4 install Redis configuration center","keywords":"","body":"install Redis register center\nRedis 1 introductions, please refer to: Redis application center manual。\nyou need an origin Redis server only, and change dubbo.registry.addrss to redis://127.0.0.1:6379 in conf/dubbo.properties this file exits in Provider and Consumer herequick start\nRedis configuration center cluster 2 write multiple server in client side and read from a single server.\nInstall:\nwget http://redis.googlecode.com/files/redis-2.4.8.tar.gz\ntar xzf redis-2.4.8.tar.gz\ncd redis-2.4.8\nmake\n\nConfiguration:\nvi redis.conf\n\nStart:\nnohup ./src/redis-server redis.conf &\n\nStop:\nkillall redis-server\n\n\nCommand line 3:\n\n./src/redis-cli\nhgetall /dubbo/com.foo.BarService/providers\n\nOr: \ntelnet 127.0.0.1 6379\nhgetall /dubbo/com.foo.BarService/providers\n\n\n1. Redis is a high performance KV store server, please refer to: http://redis.io/topics/quickstart ↩\n\n\n2. Support for version 2.1.0 and higher ↩\n\n\n3. Please refer to: http://redis.io/commands ↩\n\n"},"install/simple-registry-center.html":{"url":"install/simple-registry-center.html","title":"1.5 install Simple configuration center","keywords":"","body":"install Simple configuration center\nSimple Registry has not been well tested, may have bug, cluster is not supported, not recommended to use in production environment\nInstall:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-registry-simple/2.4.1/dubbo-registry-simple-2.4.1-assembly.tar.gz\ntar zxvf dubbo-registry-simple-2.4.1-assembly.tar.gz\ncd dubbo-registry-simple-2.4.1\n\nConfiguration:\nvi conf/dubbo.properties\n\nStart:\n./bin/start.sh\n\nStop:\n./bin/stop.sh\n\nRestart:\n./bin/restart.sh\n\nDebug:\n./bin/start.sh debug\n\nSystem status:\n./bin/dump.sh\n\nGeneral control entrance: \n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\nStdout:\ntail -f logs/stdout.log\n\nCommand line 1:\ntelnet 127.0.0.1 9090\nhelp\n\nOr:\necho status | nc -i 1 127.0.0.1 9090\n\n\n1. Please refer to Telnet command manual ↩\n\n"},"install/simple-monitor-center.html":{"url":"install/simple-monitor-center.html","title":"1.6 install Simple monitor center","keywords":"","body":"install Simple monitor center\nStep\ninstall:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-monitor-simple/2.4.1/dubbo-monitor-simple-2.4.1-assembly.tar.gz\ntar zxvf dubbo-monitor-simple-2.4.1-assembly.tar.gz\ncd dubbo-monitor-simple-2.4.1\n\nconfiguration:\nvi conf/dubbo.properties\n\nstart:\n./bin/start.sh\n\nstop:\n./bin/stop.sh\n\nrestart:\n./bin/restart.sh\n\ndebug:\n./bin/start.sh debug\n\nsystem status:\n./bin/dump.sh\n\nGeneral control entrance:\n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\nStdout:\ntail -f logs/stdout.log\n\nCommand line 1:\ntelnet 127.0.0.1 7070\nhelp\n\nOr:\necho status | nc -i 1 127.0.0.1 7070\n\nVisit:\nhttp://127.0.0.1:8080\n\nNOTICE\nThe failure of Simple Monitor will not effect on consumer and provider's running, therefore there would be no risk in production environment\nSimple Monitor use disk to store statistics information, please focus on the limitation of your machine. Mount share disk is recommended if cluster is needed\nCharts directory must be in jetty.directory, or it can not be accessed by web page.\n\n1. Please refer to Telnet command reference manual ↩\n\n"},"install/admin-console.html":{"url":"install/admin-console.html","title":"1.7 install admin console","keywords":"","body":"Install admin console\nInclude: route rule, dynamic configuration, service downgrade, access control, weight adjustment, load balance, etc.\nInstall:\nwget http://apache.etoak.com/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz\ntar zxvf apache-tomcat-6.0.35.tar.gz\ncd apache-tomcat-6.0.35\nrm -rf webapps/ROOT\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1.war\nunzip dubbo-admin-2.4.1.war -d webapps/ROOT\n\nConfiguration 1:\nvi webapps/ROOT/WEB-INF/dubbo.properties\ndubbo.properties\ndubbo.registry.address=zookeeper://127.0.0.1:2181\ndubbo.admin.root.password=root\ndubbo.admin.guest.password=guest\n\nStart:\n./bin/startup.sh\n\nStop:\n./bin/shutdown.sh\n\nVisit 2:\nhttp://127.0.0.1:8080/\n\n1. Or put dubbo.properties in current user directory ↩\n\n\n2. User: root, password: root or user: guest, password: guest ↩\n\n"},"ops/introduction.html":{"url":"ops/introduction.html","title":"2 Ops manual","keywords":"","body":"Ops manual\n"},"ops/dubbo-ops.html":{"url":"ops/dubbo-ops.html","title":"2.1 admin-console Ops","keywords":"","body":"Ops console management\nPage search\nIf you need to manage a Dubbo service, you need to search it first and open it's management page\n\nService provider page\n\nService consumer page\n\nService application page\n\nAdd route rule page\n\nAdd dynamic configuration page\n\nService register\nService downgrade\nRoute rule\nAccess control\nDynamic configuration\nWeight adjustment\nLoad balance\nService owner\n"}}}
\ No newline at end of file
+{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["admin","admin.","book","center","dubbo","guidanc","instal","introduct","mainten","registri"],"install/introduction.html":["1","1.","127.0.0.1","224.0.0.0","239.255.255.255","add","address","address,","balance.","broadcast","broadcast,","call","center","center,","chang","conf/dubbo.properti","configur","conflict,","consum","consumers.","cost","d","default","demo","depend","differ","directly.","directori","discoveri","display","dubbo.protocol.port","dubbo.registry.address","dubbo://127.0.0.1:9090","instal","installation,","instanc","instead","ip","issu","load","machin","machine'","machine,","manual","modifi","monitor","monitor,","multi","multicast","multicast://224.5.6.7:1234?unicast=false,","multipl","notice:","only,","part","port","provid","provider,","recommend","redi","registri","registry).","relationship,","run","same","send","set","simpl","so,","strategi","taken","time","two","type","under","unicast","unicast=false,","us","valu","verifi","zookeep","zookeeper://127.0.0.1:2181(redis://127.0.0.1:6379","↩"],"install/provider-demo.html":["1.1","add","address,","cd","chang","clone","com.alibaba.dubbo.demo.provider.provid","configuration:","demo","djava.net.preferipv4stack=tru","dubbo","dubbo.git","dubbo:registeri","git","https://github.com/apache/incub","id","idea","incub","info.spring/dubbo","instal","install:","intellij","modul","provid","provider.xml","real","recommand","registeri","resource/meta","run","server","under","zookeep"],"install/consumer-demo.html":["1.2","add","address","cd","center","chang","clone","configuration:","consum","consumer.xml","demo","djava.net.preferipv4stack=tru","dubbo","dubbo.git","dubbo:registeri","first","git","https://github.com/apache/incub","id","idea","incub","info.spring/dubbo","instal","install:","intellij","pleas","provid","real","registeri","resource/meta","start"],"install/zookeeper.html":["./bin/zkserver.sh","1","1,","1.","1.3","127.0.0.1","2.","2.3.3","2181","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","4.","4:","5.","5:","above1","address","apach","below","call","cd","center","chang","client","clientport=2181","cluster","command","conf/zoo.cfg","conf/zoo_sample.cfg","configur","configuration:","content","cp","data","datadir","datadir=/home/dubbo/zookeep","directori","dubbo","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dump","echo","environment.","file","fine.","first","hadoop.a","happen","http://archive.apache.org/dist/zookeeper/zookeep","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","inform","initlimit=10","instal","install:","line","machin","mkdir","myid","nc","needed,","noth","number","one'","or:","origin","output","product","project","put","real","recommend","regist","robust,","second","server","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","side","side,","start","start:","stop","stop:","sub","synclimit=5","tar","telnet","ticktime=2000","us","usage:","version:","vi","wget","zoo.cfg","zoo.cfg.","zookeep","zookeeper'","zxvf","|","↩"],"install/redis.html":["&","./src/redi","/dubbo/com.foo.barservice/provid","1","1.","1.4","127.0.0.1","2","2.","2.1.0","2.4.8","2.4.8.tar.gz","3.","3:","6379","applic","archiv","cd","center","chang","cli","client","cluster","code","command","conf/dubbo.properti","configur","configuration:","downloads/v2/code.google.com/redis/redi","dubbo.registry.addrss","hgetal","high","higher","http://redis.io/command","http://redis.io/topics/quickstart","https://storage.googleapis.com/googl","instal","install:","introductions,","killal","kv","line","make","manual。","multipl","need","nohup","only,","or:","origin","perform","pleas","quick","read","redi","redis.conf","redis://127.0.0.1:6379","refer","regist","server","server,","server.","side","singl","start","start:","stop:","store","support","tar","telnet","to:","valu","version","vi","wget","write","xzf","↩"],"install/simple-registry-center.html":["&&","./assembly.bin/dump.sh","./assembly.bin/restart.sh","./assembly.bin/server.sh","./assembly.bin/start.sh","./assembly.bin/stop.sh","1","1.","1.5","127.0.0.1","1:","2.0.0","9090","assembly.tar.gz","bug,","cd","center","clone","cluster","command","conf/dubbo.properti","configur","configuration:","control","debug","debug:","dubbo","dump","echo","entrance:","environ","f","gener","git","help","https://github.com/apache/incub","incub","instal","install:","line","logs/stdout.log","manual","mvn","nc","op","or:","packag","pleas","product","recommend","refer","registri","restart","restart:","simpl","simple/target","start","start:","statu","status:","stdout:","stop","stop:","supported,","system","tail","tar","telnet","tested,","us","vi","well","xvf","|","↩"],"install/simple-monitor-center.html":["&&","./assembly.bin/dump.sh","./assembly.bin/restart.sh","./assembly.bin/server.sh","./assembly.bin/start.sh","./assembly.bin/stop.sh","1","1.","1.6","127.0.0.1","1:","2.0.0","7070","access","assembly.tar.gz","cd","center","chart","clone","cluster","command","conf/dubbo.properti","configuration:","consum","control","debug","debug:","directori","disk","dubbo","dump","echo","effect","entrance:","environ","f","failur","focu","gener","git","help","http://127.0.0.1:8080","https://github.com/apache/incub","incub","information,","instal","install:","jetty.directory,","limit","line","logs/stdout.log","machine.","manual","monitor","mount","mvn","nc","need","notic","op","or:","packag","page.","pleas","product","provider'","recommend","refer","restart","restart:","risk","running,","share","simpl","simple/target","start","start:","statist","statu","status:","stdout:","step","stop","stop:","store","system","tail","tar","telnet","therefor","us","vi","visit:","web","xvf","|","↩"],"install/admin-console.html":["./bin/shutdown.sh","./bin/startup.sh","/var/tmp/dubbo","1.","1.7","1:","2.","2.0.0.war","2:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","access","adjustment,","admin","admin/target/dubbo","apach","balance,","cd","clean","clone","configur","configuration,","consol","control,","current","d","directori","downgrade,","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.properti","dubbo.registry.address=zookeeper://127.0.0.1:2181","dynam","etc.","git","guest","guest,","http://127.0.0.1:8080/","https://archive.apache.org/dist/tomcat/tomcat","https://github.com/dubbo/dubbo","include:","inf/dubbo.properti","instal","install:","load","mvn","op","ops.git","ops/dubbo","packag","password:","popd","pushd","put","rf","rm","root","root,","rout","rule,","servic","start:","stop:","tar","tomcat","unzip","user","user:","vi","visit","webapps/root","webapps/root/web","weight","wget","zxvf","↩"],"ops/dubbo-ops.html":["2.1","access","add","adjust","admin","applic","balanc","configur","consol","consum","control","downgrad","dubbo","dynam","first","it'","load","manag","need","op","open","owner","page","provid","regist","rout","rule","search","servic","service,","weight"]},"length":10},"tokenStore":{"root":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":3.333333333333333},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},".":{"1":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.5}}},"2":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.5}}},"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2}}},"4":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":2}}},"5":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2}}},"6":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2}}},"7":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.5}}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}},"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}},"2":{"4":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"3":{"9":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},".":{"0":{"docs":{},".":{"0":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}},"docs":{}}},"1":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.5}},".":{"0":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},"docs":{}}},"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}}},"4":{"docs":{},".":{"8":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}},"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"4":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"5":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},"docs":{}},"docs":{}},"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"/":{"docs":{},"v":{"6":{"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}}},"7":{"0":{"7":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}},"docs":{}},"docs":{}},"docs":{}},"9":{"0":{"9":{"0":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.1},"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.5224719101123596},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.5}},".":{"docs":{"./":{"ref":"./","tf":0.1}}},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776}}}}}}}},"j":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"v":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}}}}}},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.1}}}}},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}},"u":{"docs":{},"g":{"docs":{},",":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102}}}}}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.1},"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0129032258064514},"install/redis.html":{"ref":"install/redis.html","tf":2.0288461538461537},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.01010101010101},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.0078740157480315}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"r":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.03076923076923077},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0064516129032257},"install/redis.html":{"ref":"install/redis.html","tf":2.0096153846153846},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.01010101010101},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"t":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.038461538461538464},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.532258064516129},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}}}}}}},"o":{"docs":{},"l":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.5112359550561796},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.520408163265306}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226}}}}},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}}}}}},"d":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.030303030303030304},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.023622047244094488},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}},"l":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.2},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.05555555555555555},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.050505050505050504},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.03937007874015748},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}},"=":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},"?":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"9":{"0":{"9":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.06153846153846154},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.5833333333333335},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.564516129032258}}}},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"i":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"k":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"v":{"4":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},"=":{"docs":{},"/":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"s":{"docs":{},"/":{"docs":{},"v":{"2":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}}}}}}},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"./":{"ref":"./","tf":0.1}}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}},"i":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.1},"install/introduction.html":{"ref":"install/introduction.html","tf":3.356410256410256},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.5277777777777777},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":2.532258064516129},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0064516129032257},"install/redis.html":{"ref":"install/redis.html","tf":2.0096153846153846},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.01010101010101},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.0078740157480315},"install/admin-console.html":{"ref":"install/admin-console.html","tf":2.5112359550561796}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}},"n":{"docs":{},"c":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":10}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},",":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"j":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}}}}},"c":{"docs":{},"u":{"docs":{},"b":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}},"l":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}},"f":{"docs":{},"o":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"1":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}}}}}}}}}},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}},"e":{"docs":{},"a":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}},"t":{"docs":{},"'":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.1}}}}}}},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}},"e":{"docs":{},"'":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},".":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}},"n":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":3.3410256410256407},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"a":{"docs":{},"g":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.061224489795918366}}}}},"k":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}},"u":{"docs":{},"l":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776}}}}},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.047244094488189}},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.038461538461538464}},":":{"docs":{},"/":{"docs":{},"/":{"2":{"2":{"4":{"docs":{},".":{"5":{"docs":{},".":{"6":{"docs":{},".":{"7":{"docs":{},":":{"1":{"2":{"3":{"4":{"docs":{},"?":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}},"k":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}},"y":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.01935483870967742}}}}},"v":{"docs":{},"n":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"r":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.1},"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.04040404040404041}}},"y":{"docs":{},")":{"docs":{},".":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776}}}}}}}}},"d":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/redis.html":{"ref":"install/redis.html","tf":2.0865384615384617}},"s":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"h":{"docs":{},"i":{"docs":{},"p":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}}}}},"u":{"docs":{},"n":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.038461538461538464},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}},"l":{"docs":{},"e":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"o":{"docs":{},"b":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}},"u":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}}}}},"i":{"docs":{},"s":{"docs":{},"k":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"f":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}},"m":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"e":{"docs":{},":":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"h":{"docs":{},"u":{"docs":{},"p":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"c":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}},"e":{"docs":{},"e":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}},"u":{"docs":{},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"e":{"docs":{},"'":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}},"r":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}},"i":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}},"p":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":2.520408163265306}},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}},"e":{"docs":{},"n":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}},"w":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"g":{"docs":{},"e":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.14285714285714285}},".":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"p":{"docs":{},"d":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":2.5555555555555554},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776}}}}}},"'":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}}}}},"u":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}},"s":{"docs":{},"h":{"docs":{},"d":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.025806451612903226},"install/redis.html":{"ref":"install/redis.html","tf":0.038461538461538464}},".":{"1":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}},",":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"i":{"docs":{},"c":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.12244897959183673}},"e":{"docs":{},",":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.04081632653061224}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":2.04040404040404},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":2.0393700787401574}},"e":{"docs":{},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},",":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"o":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385}}}}}}}},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}},"t":{"docs":{},"u":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"s":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"o":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}},"r":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"e":{"docs":{},"p":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"u":{"docs":{},"b":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102}}}}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"t":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}},"i":{"docs":{},"l":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"c":{"docs":{},"k":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"2":{"0":{"0":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"w":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}}}}},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102}}}}}}}},"o":{"docs":{},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848}}},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.033707865168539325}}}}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.015384615384615385},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776}}}}},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}}}}}}}}}}},"z":{"docs":{},"i":{"docs":{},"p":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}},"e":{"docs":{},"r":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}},"i":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}},":":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.023076923076923078},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":2.0387096774193547}},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}},"'":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.01935483870967742}},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}},"x":{"docs":{},"v":{"docs":{},"f":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"↩":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.007692307692307693},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.03225806451612903},"install/redis.html":{"ref":"install/redis.html","tf":0.028846153846153848},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"b":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.027777777777777776},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"8":{"0":{"8":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"/":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},"/":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"o":{"docs":{},"o":{"docs":{},"p":{"docs":{},".":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"e":{"docs":{},"r":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}},"f":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.03225806451612903},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}},"l":{"docs":{},"e":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}},"n":{"docs":{},"e":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"u":{"docs":{},"r":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"z":{"docs":{},"k":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.012903225806451613}}}}}}}}}}}}},"s":{"docs":{},"h":{"docs":{},"u":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.050505050505050504},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.03937007874015748}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}}}}}}},"o":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"n":{"docs":{},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}},"t":{"docs":{},"c":{"docs":{},".":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}},"w":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102}}}},"b":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.02247191011235955}},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.011235955056179775},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.02040816326530612}}}}}}}},"|":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.0064516129032258064},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}},"&":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}},"&":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.020202020202020204},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.015748031496062992}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.019230769230769232}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"/":{"docs":{},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.033707865168539325}}}}}}}}}}}}}}}},"k":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}},"v":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}}}}},"x":{"docs":{},"z":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.009615384615384616}}}},"v":{"docs":{},"f":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.010101010101010102},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.007874015748031496}}}}}}}}}}}}}}}}}}},"length":619},"corpusTokens":["&","&&","./assembly.bin/dump.sh","./assembly.bin/restart.sh","./assembly.bin/server.sh","./assembly.bin/start.sh","./assembly.bin/stop.sh","./bin/shutdown.sh","./bin/startup.sh","./bin/zkserver.sh","./src/redi","/dubbo/com.foo.barservice/provid","/var/tmp/dubbo","1","1,","1.","1.1","1.2","1.3","1.4","1.5","1.6","1.7","127.0.0.1","1:","2","2.","2.0.0","2.0.0.war","2.1","2.1.0","2.3.3","2.4.8","2.4.8.tar.gz","2181","224.0.0.0","239.255.255.255","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","4.","4:","5.","5:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","6379","7070","9090","above1","access","add","address","address,","adjust","adjustment,","admin","admin.","admin/target/dubbo","apach","applic","archiv","assembly.tar.gz","balanc","balance,","balance.","below","book","broadcast","broadcast,","bug,","call","cd","center","center,","chang","chart","clean","cli","client","clientport=2181","clone","cluster","code","com.alibaba.dubbo.demo.provider.provid","command","conf/dubbo.properti","conf/zoo.cfg","conf/zoo_sample.cfg","configur","configuration,","configuration:","conflict,","consol","consum","consumer.xml","consumers.","content","control","control,","cost","cp","current","d","data","datadir","datadir=/home/dubbo/zookeep","debug","debug:","default","demo","depend","differ","directly.","directori","discoveri","disk","display","djava.net.preferipv4stack=tru","downgrad","downgrade,","downloads/v2/code.google.com/redis/redi","dubbo","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.git","dubbo.properti","dubbo.protocol.port","dubbo.registry.address","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dubbo.registry.address=zookeeper://127.0.0.1:2181","dubbo.registry.addrss","dubbo://127.0.0.1:9090","dubbo:registeri","dump","dynam","echo","effect","entrance:","environ","environment.","etc.","f","failur","file","fine.","first","focu","gener","git","guest","guest,","guidanc","hadoop.a","happen","help","hgetal","high","higher","http://127.0.0.1:8080","http://127.0.0.1:8080/","http://archive.apache.org/dist/zookeeper/zookeep","http://redis.io/command","http://redis.io/topics/quickstart","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","https://archive.apache.org/dist/tomcat/tomcat","https://github.com/apache/incub","https://github.com/dubbo/dubbo","https://storage.googleapis.com/googl","id","idea","include:","incub","inf/dubbo.properti","info.spring/dubbo","inform","information,","initlimit=10","instal","install:","installation,","instanc","instead","intellij","introduct","introductions,","ip","issu","it'","jetty.directory,","killal","kv","limit","line","load","logs/stdout.log","machin","machine'","machine,","machine.","mainten","make","manag","manual","manual。","mkdir","modifi","modul","monitor","monitor,","mount","multi","multicast","multicast://224.5.6.7:1234?unicast=false,","multipl","mvn","myid","nc","need","needed,","nohup","noth","notic","notice:","number","one'","only,","op","open","ops.git","ops/dubbo","or:","origin","output","owner","packag","page","page.","part","password:","perform","pleas","popd","port","product","project","provid","provider'","provider,","provider.xml","pushd","put","quick","read","real","recommand","recommend","redi","redis.conf","redis://127.0.0.1:6379","refer","regist","registeri","registri","registry).","relationship,","resource/meta","restart","restart:","rf","risk","rm","robust,","root","root,","rout","rule","rule,","run","running,","same","search","second","send","server","server,","server.","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","servic","service,","set","share","side","side,","simpl","simple/target","singl","so,","start","start:","statist","statu","status:","stdout:","step","stop","stop:","store","strategi","sub","support","supported,","synclimit=5","system","tail","taken","tar","telnet","tested,","therefor","ticktime=2000","time","to:","tomcat","two","type","under","unicast","unicast=false,","unzip","us","usage:","user","user:","valu","verifi","version","version:","vi","visit","visit:","web","webapps/root","webapps/root/web","weight","well","wget","write","xvf","xzf","zoo.cfg","zoo.cfg.","zookeep","zookeeper'","zookeeper://127.0.0.1:2181(redis://127.0.0.1:6379","zxvf","|","↩"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"dubbo-admin-book\nThe installation and maintenance guidance of registry center and dubbo-admin.\n"},"install/introduction.html":{"url":"install/introduction.html","title":"1 install manual","keywords":"","body":"Install manual\nYou can run Demo Provider and Demo Consumer only, the default discovery strategy is Multicast by configuration center broadcast, do not run the two parts on the same machine, if you have to do so, set unicast=false, like multicast://224.5.6.7:1234?unicast=false, or the unicast send to consumer will be taken by provider, and the same for consumers. Only multicast has this issue\nYou can run multiple Demo Provider and Demo consumer to verify load balance. Demo Consumer can run multi instance directly. Because of port conflict, you can either run multi Demo Providers on different machines or modify the value of dubbo.protocol.port in conf/dubbo.properties under the install directory of conf/dubbo.properties\nYou can add Simple Monitor as a monitor center, the default discovery strategy is Multicast by configuration center broadcast, display the dependency relationship, call times and cost\nYou can use Zookeeper instead of Multicast as the configuration center, after Zookeeper Registry installation, modify conf/dubbo.properties under the installation directory of Demo Provider, Demo Consumer and Simple Monitor, change the value of dubbo.registry.address to zookeeper://127.0.0.1:2181(redis://127.0.0.1:6379 for Redis Registry). the value for Simple Registry is dubbo://127.0.0.1:9090\nZookeeper configuration address is recommended\n\n1. NOTICE: multicast can be neither 127.0.0.1 nor the machine's IP address, it must be a type D broadcast address, from 224.0.0.0 to 239.255.255.255 ↩\n\n"},"install/provider-demo.html":{"url":"install/provider-demo.html","title":"1.1 install provider demo","keywords":"","body":"install demo provider\ninstall:\ngit clone https://github.com/apache/incubator-dubbo.git\ncd incubator-dubbo\nrun com.alibaba.dubbo.demo.provider.Provider under dubbo-demo-provider module\nadd -Djava.net.preferIPv4Stack=true if your IDE is Intellij Idea\n\nconfiguration:\nresource/META-INFO.spring/dubbo-demo-provider.xml\nchange dubbo:registery to a real registery server address, zookeeper is recommanded\n\n"},"install/consumer-demo.html":{"url":"install/consumer-demo.html","title":"1.2 install consumer demo","keywords":"","body":"install demo consumer\ninstall:\ngit clone https://github.com/apache/incubator-dubbo.git\ncd incubator-dubbo\nPlease start Provider first\nadd -Djava.net.preferIPv4Stack=true if your IDE is Intellij Idea\n\nconfiguration:\nresource/META-INFO.spring/dubbo-demo-consumer.xml\nchange dubbo:registery to the real registery center address\n\n"},"install/zookeeper.html":{"url":"install/zookeeper.html","title":"1.3 install Zookeeper configuration center","keywords":"","body":"install Zookeeper configuration center\nzookeeper register center client version: dubbo-2.3.3 and above1\nDubbo changes nothing of Zookeeper's server side, an original Zookeeper server is fine. All change happens while calling Zookeeper's client side\ninstall:\nwget http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz\ntar zxvf zookeeper-3.3.3.tar.gz\ncd zookeeper-3.3.3\ncp conf/zoo_sample.cfg conf/zoo.cfg\n\nconfiguration:\nvi conf/zoo.cfg\n\nIf cluster is not needed, the content of zoo.cfg is as below 2: \ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\n\nIf cluster is needed, the content of zoo.cfg is as below 3: \ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\nserver.1=10.20.153.10:2555:3555\nserver.2=10.20.153.11:2555:3555\n\nPut myid file in data directory 4:\nmkdir data\nvi myid\n\nMyid is the number after server in zoo.cfg. The first one's content is 1, the second one's content is 2:\n1\nStart:\n./bin/zkServer.sh start\n\nStop:\n./bin/zkServer.sh stop\n\nCommand line 5: \ntelnet 127.0.0.1 2181\ndump\n\nOr:\necho dump | nc 127.0.0.1 2181\n\nUsage:\ndubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181\n\nOr:\n\n\n\n1. Zookeeper is a sub project of Apache Hadoop.As it is robust, we recommend to use in production environment. ↩\n\n\n2. Data directory should be changed into your real output directory ↩\n\n\n3. Data directory and server address should be changed into your real machine information ↩\n\n\n4. dataDir in zoo.cfg ↩\n\n\n5. http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html ↩\n\n"},"install/redis.html":{"url":"install/redis.html","title":"1.4 install Redis configuration center","keywords":"","body":"install Redis register center\nRedis 1 introductions, please refer to: Redis application center manual。\nyou need an origin Redis server only, and change the value from dubbo.registry.addrss to redis://127.0.0.1:6379 in conf/dubbo.properties of quick start\nRedis configuration center cluster 2 write multiple server in client side and read from a single server.\nInstall:\nwget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/redis/redis-2.4.8.tar.gz\ntar xzf redis-2.4.8.tar.gz\ncd redis-2.4.8\nmake\n\nConfiguration:\nvi redis.conf\n\nStart:\nnohup ./src/redis-server redis.conf &\n\nStop:\nkillall redis-server\n\n\nCommand line 3:\n\n./src/redis-cli\nhgetall /dubbo/com.foo.BarService/providers\n\nOr: \ntelnet 127.0.0.1 6379\nhgetall /dubbo/com.foo.BarService/providers\n\n\n1. Redis is a high performance KV store server, please refer to: http://redis.io/topics/quickstart ↩\n\n\n2. Support for version 2.1.0 and higher ↩\n\n\n3. Please refer to: http://redis.io/commands ↩\n\n"},"install/simple-registry-center.html":{"url":"install/simple-registry-center.html","title":"1.5 install Simple configuration center","keywords":"","body":"install Simple configuration center\nSimple Registry has not been well tested, may have bug, cluster is not supported, not recommended to use in production environment\nInstall:\ngit clone https://github.com/apache/incubator-dubbo-ops\ncd incubator-dubbo-ops && mvn package\ncd dubbo-registry-simple/target && tar xvf dubbo-registry-simple-2.0.0-assembly.tar.gz\ncd dubbo-registry-simple-2.0.0\n\nConfiguration:\nvi conf/dubbo.properties\n\nStart:\n./assembly.bin/start.sh\n\nStop:\n./assembly.bin/stop.sh\n\nRestart:\n./assembly.bin/restart.sh\n\nDebug:\n./assembly.bin/start.sh debug\n\nSystem status:\n./assembly.bin/dump.sh\n\nGeneral control entrance: \n./assembly.bin/server.sh start\n./assembly.bin/server.sh stop\n./assembly.bin/server.sh restart\n./assembly.bin/server.sh debug\n./assembly.bin/server.sh dump\n\nStdout:\ntail -f logs/stdout.log\n\nCommand line 1:\ntelnet 127.0.0.1 9090\nhelp\n\nOr:\necho status | nc -i 1 127.0.0.1 9090\n\n\n1. Please refer to Telnet command manual ↩\n\n"},"install/simple-monitor-center.html":{"url":"install/simple-monitor-center.html","title":"1.6 install Simple monitor center","keywords":"","body":"install Simple monitor center\nStep\ninstall:\ngit clone https://github.com/apache/incubator-dubbo-ops\ncd incubator-dubbo-ops && mvn package\ncd dubbo-monitor-simple/target && tar xvf dubbo-monitor-simple-2.0.0-assembly.tar.gz\ncd dubbo-monitor-simple-2.0.0\n\nconfiguration:\nvi conf/dubbo.properties\n\nstart:\n./assembly.bin/start.sh\n\nstop:\n./assembly.bin/stop.sh\n\nrestart:\n./assembly.bin/restart.sh\n\ndebug:\n./assembly.bin/start.sh debug\n\nsystem status:\n./assembly.bin/dump.sh\n\nGeneral control entrance:\n./assembly.bin/server.sh start\n./assembly.bin/server.sh stop\n./assembly.bin/server.sh restart\n./assembly.bin/server.sh debug\n./assembly.bin/server.sh dump\n\nStdout:\ntail -f logs/stdout.log\n\nCommand line 1:\ntelnet 127.0.0.1 7070\nhelp\n\nOr:\necho status | nc -i 1 127.0.0.1 7070\n\nVisit:\nhttp://127.0.0.1:8080\n\nNOTICE\nThe failure of Simple Monitor will not effect on consumer and provider's running, therefore there would be no risk in production environment\nSimple Monitor use disk to store statistics information, please focus on the limitation of your machine. Mount share disk is recommended if cluster is needed\nCharts directory must be in jetty.directory, or it can not be accessed by web page.\n\n1. Please refer to Telnet command reference manual ↩\n\n"},"install/admin-console.html":{"url":"install/admin-console.html","title":"1.7 install admin console","keywords":"","body":"Install admin console\nInclude: route rule, dynamic configuration, service downgrade, access control, weight adjustment, load balance, etc.\nInstall:\nwget https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz\ntar zxvf apache-tomcat-6.0.35.tar.gz\ncd apache-tomcat-6.0.35\nrm -rf webapps/ROOT\n\ngit clone https://github.com/dubbo/dubbo-ops.git /var/tmp/dubbo-ops\npushd /var/tmp/dubbo-ops\nmvn clean package\npopd\n\nunzip /var/tmp/dubbo-ops/dubbo-admin/target/dubbo-admin-2.0.0.war -d webapps/ROOT\n\nConfiguration 1:\nvi webapps/ROOT/WEB-INF/dubbo.properties\ndubbo.properties\ndubbo.registry.address=zookeeper://127.0.0.1:2181\ndubbo.admin.root.password=root\ndubbo.admin.guest.password=guest\n\nStart:\n./bin/startup.sh\n\nStop:\n./bin/shutdown.sh\n\nVisit 2:\nhttp://127.0.0.1:8080/\n\n1. Or put dubbo.properties in current user directory ↩\n\n\n2. User: root, password: root or user: guest, password: guest ↩\n\n"},"ops/dubbo-ops.html":{"url":"ops/dubbo-ops.html","title":"2.1 admin-console Ops","keywords":"","body":"Ops console management\nPage search\nIf you need to manage a Dubbo service, you need to search it first and open it's management page\n\nService provider page\n\nService consumer page\n\nService application page\n\nAdd route rule page\n\nAdd dynamic configuration page\n\nService register\nService downgrade\nRoute rule\nAccess control\nDynamic configuration\nWeight adjustment\nLoad balance\nService owner\n"}}}
\ No newline at end of file
diff --git a/books/dubbo-admin-book/index.html b/books/dubbo-admin-book/index.html
index 9b3c9f1d..82404632 100644
--- a/books/dubbo-admin-book/index.html
+++ b/books/dubbo-admin-book/index.html
@@ -327,7 +327,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 安装手册","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2017-12-26T02:27:58.955Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 安装手册","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2018-03-19T06:46:50.828Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/admin-console.html b/books/dubbo-admin-book/install/admin-console.html
index 7217432f..37dac434 100644
--- a/books/dubbo-admin-book/install/admin-console.html
+++ b/books/dubbo-admin-book/install/admin-console.html
@@ -292,12 +292,17 @@ <h1>
                                 <h1 id="&#x7BA1;&#x7406;&#x63A7;&#x5236;&#x53F0;&#x5B89;&#x88C5;">&#x7BA1;&#x7406;&#x63A7;&#x5236;&#x53F0;&#x5B89;&#x88C5;</h1>
 <p>&#x7BA1;&#x7406;&#x63A7;&#x5236;&#x53F0;&#x4E3A;&#x5185;&#x90E8;&#x88C1;&#x526A;&#x7248;&#x672C;&#xFF0C;&#x5F00;&#x6E90;&#x90E8;&#x5206;&#x4E3B;&#x8981;&#x5305;&#x542B;&#xFF1A;&#x8DEF;&#x7531;&#x89C4;&#x5219;&#xFF0C;&#x52A8;&#x6001;&#x914D;&#x7F6E;&#xFF0C;&#x670D;&#x52A1;&#x964D;&#x7EA7;&#xFF0C;&#x8BBF;&#x95EE;&#x63A7;&#x5236;&#xFF0C;&#x6743;&#x91CD;&#x8C03;&#x6574;&#xFF0C;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF0C;&#x7B49;&#x7BA1;&#x7406;&#x529F;&#x80FD;&#x3002;</p>
 <p>&#x5B89;&#x88C5;:</p>
-<pre><code class="lang-sh">wget http://apache.etoak.com/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz
+<pre><code class="lang-sh">wget https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz
 tar zxvf apache-tomcat-6.0.35.tar.gz
 <span class="hljs-built_in">cd</span> apache-tomcat-6.0.35
 rm -rf webapps/ROOT
-wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1.war
-unzip dubbo-admin-2.4.1.war <span class="hljs-_">-d</span> webapps/ROOT
+
+git <span class="hljs-built_in">clone</span> https://github.com/dubbo/dubbo-ops.git /var/tmp/dubbo-ops
+<span class="hljs-built_in">pushd</span> /var/tmp/dubbo-ops
+mvn clean package
+<span class="hljs-built_in">popd</span>
+
+unzip /var/tmp/dubbo-ops/dubbo-admin/target/dubbo-admin-2.0.0.war <span class="hljs-_">-d</span> webapps/ROOT
 </code></pre>
 <p>&#x914D;&#x7F6E; <sup><a href="#fn_1" id="reffn_1">1</a></sup>:</p>
 <pre><code class="lang-sh">vi webapps/ROOT/WEB-INF/dubbo.properties
@@ -363,7 +368,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"next":{"title":"2 运维手册","level":"1.3","depth":1,"path":"ops/introduction.md","ref":"ops/introduction.md","articles":[{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"previous":{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/admin-console.md","mtime":"2017-12-26T02:27:58.955Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"next":{"title":"2 运维手册","level":"1.3","depth":1,"path":"ops/introduction.md","ref":"ops/introduction.md","articles":[{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"previous":{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/admin-console.md","mtime":"2018-05-14T09:24:13.939Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/consumer-demo.html b/books/dubbo-admin-book/install/consumer-demo.html
index 93d83b9d..f6e42ddc 100644
--- a/books/dubbo-admin-book/install/consumer-demo.html
+++ b/books/dubbo-admin-book/install/consumer-demo.html
@@ -291,38 +291,15 @@ <h1>
                                 
                                 <h1 id="&#x793A;&#x4F8B;&#x6D88;&#x8D39;&#x8005;&#x5B89;&#x88C5;">&#x793A;&#x4F8B;&#x6D88;&#x8D39;&#x8005;&#x5B89;&#x88C5;</h1>
 <p>&#x5B89;&#x88C5;:</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-consumer/2.4.1/dubbo-demo-consumer-2.4.1-assembly.tar.gz
-tar zxvf dubbo-demo-consumer-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-demo-consumer-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo.git
+<span class="hljs-built_in">cd</span> incubator-dubbo
+&#x8FD0;&#x884C; dubbo-demo-consumer&#x4E2D;&#x7684;com.alibaba.dubbo.demo.consumer.Consumer
+&#x8BF7;&#x786E;&#x4FDD;&#x5148;&#x542F;&#x52A8;Provider
+&#x5982;&#x679C;&#x4F7F;&#x7528;Intellij Idea &#x8BF7;&#x52A0;&#x4E0A;-Djava.net.preferIPv4Stack=<span class="hljs-literal">true</span>
 </code></pre>
 <p>&#x914D;&#x7F6E;:</p>
-<pre><code class="lang-sh">vi conf/dubbo.properties
-</code></pre>
-<p>&#x542F;&#x52A8;:</p>
-<pre><code class="lang-sh">./bin/start.sh
-tail <span class="hljs-_">-f</span> logs/stdout.log
-</code></pre>
-<p>&#x505C;&#x6B62;:</p>
-<pre><code class="lang-sh">./bin/stop.sh
-</code></pre>
-<p>&#x91CD;&#x542F;:</p>
-<pre><code class="lang-sh">./bin/restart.sh
-</code></pre>
-<p>&#x8C03;&#x8BD5;:</p>
-<pre><code class="lang-sh">./bin/start.sh debug
-</code></pre>
-<p>&#x7CFB;&#x7EDF;&#x72B6;&#x6001;:</p>
-<pre><code class="lang-sh">./bin/dump.sh
-</code></pre>
-<p>&#x603B;&#x63A7;&#x5165;&#x53E3;:</p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
-</code></pre>
-<p>&#x6807;&#x51C6;&#x8F93;&#x51FA;:</p>
-<pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
+<pre><code class="lang-sh">resource/META-INFO.spring/dubbo-demo-consumer.xml
+&#x4FEE;&#x6539;&#x5176;&#x4E2D;&#x7684;dubbo:registery&#xFF0C;&#x66FF;&#x6362;&#x6210;Provider&#x63D0;&#x4F9B;&#x7684;&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5730;&#x5740;
 </code></pre>
 
                                 
@@ -367,7 +344,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"next":{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"previous":{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/consumer-demo.md","mtime":"2017-12-26T02:27:58.956Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"next":{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"previous":{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/consumer-demo.md","mtime":"2018-04-13T06:52:30.927Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/introduction.html b/books/dubbo-admin-book/install/introduction.html
index 70fd2155..6d1c7f59 100644
--- a/books/dubbo-admin-book/install/introduction.html
+++ b/books/dubbo-admin-book/install/introduction.html
@@ -341,7 +341,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1 安装手册","level":"1.2","depth":1,"next":{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/introduction.md","mtime":"2017-12-26T02:27:58.956Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1 安装手册","level":"1.2","depth":1,"next":{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/introduction.md","mtime":"2018-03-19T06:46:50.829Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/provider-demo.html b/books/dubbo-admin-book/install/provider-demo.html
index f2ca17d5..4490649f 100644
--- a/books/dubbo-admin-book/install/provider-demo.html
+++ b/books/dubbo-admin-book/install/provider-demo.html
@@ -291,48 +291,15 @@ <h1>
                                 
                                 <h1 id="&#x793A;&#x4F8B;&#x63D0;&#x4F9B;&#x8005;&#x5B89;&#x88C5;">&#x793A;&#x4F8B;&#x63D0;&#x4F9B;&#x8005;&#x5B89;&#x88C5;</h1>
 <p>&#x5B89;&#x88C5;&#xFF1A;</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-provider/2.4.1/dubbo-demo-provider-2.4.1-assembly.tar.gz
-tar zxvf dubbo-demo-provider-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-demo-provider-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo.git
+<span class="hljs-built_in">cd</span> incubator-dubbo
+&#x8FD0;&#x884C; dubbo-demo-provider&#x4E2D;&#x7684;com.alibaba.dubbo.demo.provider.Provider
+&#x5982;&#x679C;&#x4F7F;&#x7528;Intellij Idea &#x8BF7;&#x52A0;&#x4E0A;-Djava.net.preferIPv4Stack=<span class="hljs-literal">true</span>
 </code></pre>
 <p>&#x914D;&#x7F6E;&#xFF1A;</p>
-<pre><code class="lang-sh">vi conf/dubbo.properties
+<pre><code class="lang-sh">resource/META-INFO.spring/dubbo-demo-provider.xml
+&#x4FEE;&#x6539;&#x5176;&#x4E2D;&#x7684;dubbo:registery&#xFF0C;&#x66FF;&#x6362;&#x6210;&#x771F;&#x5B9E;&#x7684;&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5730;&#x5740;&#xFF0C;&#x63A8;&#x8350;&#x4F7F;&#x7528;zookeeper
 </code></pre>
-<p>&#x542F;&#x52A8;&#xFF1A;</p>
-<pre><code class="lang-sh">./bin/start.sh
-</code></pre>
-<p>&#x505C;&#x6B62;&#xFF1A;</p>
-<pre><code class="lang-sh">./bin/stop.sh
-</code></pre>
-<p>&#x91CD;&#x542F;&#xFF1A;</p>
-<pre><code class="lang-sh">./bin/restart.sh
-</code></pre>
-<p>&#x8C03;&#x8BD5;&#xFF1A;</p>
-<pre><code class="lang-sh">./bin/start.sh debug
-</code></pre>
-<p>&#x7CFB;&#x7EDF;&#x72B6;&#x6001;&#xFF1A;</p>
-<pre><code class="lang-sh">./bin/dump.sh
-</code></pre>
-<p>&#x603B;&#x63A7;&#x5165;&#x53E3;&#xFF1A;</p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
-</code></pre>
-<p>&#x6807;&#x51C6;&#x8F93;&#x51FA;&#xFF1A;</p>
-<pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
-</code></pre>
-<p>&#x547D;&#x4EE4;&#x884C; <sup><a href="#fn_1" id="reffn_1">1</a></sup>&#xFF1A;</p>
-<pre><code class="lang-sh">telnet 127.0.0.1 20880
-<span class="hljs-built_in">help</span>
-</code></pre>
-<p>&#x6216;&#x8005;&#xFF1A;</p>
-<pre><code class="lang-sh"><span class="hljs-built_in">echo</span> status | nc -i 1 127.0.0.1 20880
-</code></pre>
-<blockquote id="fn_1">
-<sup>1</sup>. &#x8BF7;&#x53C2;&#x8003; <a href="https://dubbo.gitbooks.io/dubbo-user-book/content/references/telnet.html" target="_blank">Telnet &#x547D;&#x4EE4;&#x53C2;&#x8003;&#x624B;&#x518C;</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
-</blockquote>
 
                                 
                                 </section>
@@ -376,7 +343,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"next":{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"previous":{"title":"1 安装手册","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/provider-demo.md","mtime":"2017-12-26T02:27:58.956Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"next":{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"previous":{"title":"1 安装手册","level":"1.2","depth":1,"path":"install/introduction.md","ref":"install/introduction.md","articles":[{"title":"1.1 示例提供者安装","level":"1.2.1","depth":2,"path":"install/provider-demo.md","ref":"install/provider-demo.md","articles":[]},{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/provider-demo.md","mtime":"2018-04-13T06:52:30.927Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/redis.html b/books/dubbo-admin-book/install/redis.html
index fce81bcd..aafc52a3 100644
--- a/books/dubbo-admin-book/install/redis.html
+++ b/books/dubbo-admin-book/install/redis.html
@@ -290,11 +290,11 @@ <h1>
                                 <section class="normal markdown-section">
                                 
                                 <h1 id="redis-&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;">Redis &#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;</h1>
-<p>Redis <sup><a href="#fn_1" id="reffn_1">1</a></sup> &#x4F7F;&#x7528;&#x65B9;&#x5F0F;&#x53C2;&#x89C1;: <a href="https://dubbo.gitbooks.io/dubbo-user-book/content/references/registry/redis.html" target="_blank">Redis &#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x53C2;&#x8003;&#x624B;&#x518C;</a>&#x3002;</p>
-<p>&#x53EA;&#x9700;&#x642D;&#x4E00;&#x4E2A;&#x539F;&#x751F;&#x7684; Redis &#x670D;&#x52A1;&#x5668;&#xFF0C;&#x5E76;&#x5C06;<a href="https://dubbo.gitbooks.io/dubbo-user-book/content/quick-start.html" target="_blank">&#x5FEB;&#x901F;&#x542F;&#x52A8;</a>&#x4E2D; Provider &#x548C; Consumer &#x91CC;&#x7684; <code>conf/dubbo.properties</code> &#x4E2D;&#x7684; <code>dubbo.registry.addrss</code> &#x7684;&#x503C;&#x6539;&#x4E3A; <code>redis://127.0.0.1:6379</code> &#x5373;&#x53EF;&#x4F7F;&#x7528;&#x3002;</p>
+<p>Redis <sup><a href="#fn_1" id="reffn_1">1</a></sup> &#x4F7F;&#x7528;&#x65B9;&#x5F0F;&#x53C2;&#x89C1;: <a href="http://dubbo.apache.org/books/dubbo-user-book/references/registry/redis.html" target="_blank">Redis &#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x53C2;&#x8003;&#x624B;&#x518C;</a>&#x3002;</p>
+<p>&#x53EA;&#x9700;&#x642D;&#x4E00;&#x4E2A;&#x539F;&#x751F;&#x7684; Redis &#x670D;&#x52A1;&#x5668;&#xFF0C;&#x5E76;&#x5C06;<a href="http://dubbo.apache.org/books/dubbo-user-book/quick-start.html" target="_blank">&#x5FEB;&#x901F;&#x542F;&#x52A8;</a>&#x4E2D; Provider &#x548C; Consumer &#x91CC;&#x7684; <code>conf/dubbo.properties</code> &#x4E2D;&#x7684; <code>dubbo.registry.addrss</code> &#x7684;&#x503C;&#x6539;&#x4E3A; <code>redis://127.0.0.1:6379</code> &#x5373;&#x53EF;&#x4F7F;&#x7528;&#x3002;</p>
 <p>Redis &#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x96C6;&#x7FA4; <sup><a href="#fn_2" id="reffn_2">2</a></sup> &#x91C7;&#x7528;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#x540C;&#x65F6;&#x5199;&#x5165;&#x591A;&#x4E2A;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x8BFB;&#x53D6;&#x5355;&#x4E2A;&#x670D;&#x52A1;&#x5668;&#x7684;&#x7B56;&#x7565;&#x5B9E;&#x73B0;&#x3002;</p>
 <p>&#x5B89;&#x88C5;:</p>
-<pre><code class="lang-sh">wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz
+<pre><code class="lang-sh">wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/redis/redis-2.4.8.tar.gz
 tar xzf redis-2.4.8.tar.gz
 <span class="hljs-built_in">cd</span> redis-2.4.8
 make
@@ -370,7 +370,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"next":{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"previous":{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/redis.md","mtime":"2017-12-26T02:27:58.957Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"next":{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"previous":{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"path":"install/zookeeper.md","ref":"install/zookeeper.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/redis.md","mtime":"2018-05-14T09:24:13.939Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/simple-monitor-center.html b/books/dubbo-admin-book/install/simple-monitor-center.html
index 00441474..94c18bc7 100644
--- a/books/dubbo-admin-book/install/simple-monitor-center.html
+++ b/books/dubbo-admin-book/install/simple-monitor-center.html
@@ -292,34 +292,35 @@ <h1>
                                 <h1 id="simple-&#x76D1;&#x63A7;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;">Simple &#x76D1;&#x63A7;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;</h1>
 <h2 id="&#x5B89;&#x88C5;&#x6B65;&#x9AA4;">&#x5B89;&#x88C5;&#x6B65;&#x9AA4;</h2>
 <p>&#x5B89;&#x88C5;:</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-monitor-simple/2.4.1/dubbo-monitor-simple-2.4.1-assembly.tar.gz
-tar zxvf dubbo-monitor-simple-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-monitor-simple-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo-ops
+<span class="hljs-built_in">cd</span> incubator-dubbo-ops &amp;&amp; mvn package
+<span class="hljs-built_in">cd</span> dubbo-monitor-simple/target &amp;&amp; tar xvf dubbo-monitor-simple-2.0.0-assembly.tar.gz
+<span class="hljs-built_in">cd</span> dubbo-monitor-simple-2.0.0
 </code></pre>
 <p>&#x914D;&#x7F6E;:</p>
 <pre><code class="lang-sh">vi conf/dubbo.properties
 </code></pre>
 <p>&#x542F;&#x52A8;:</p>
-<pre><code class="lang-sh">./bin/start.sh
+<pre><code class="lang-sh">./assembly.bin/start.sh
 </code></pre>
 <p>&#x505C;&#x6B62;:</p>
-<pre><code class="lang-sh">./bin/stop.sh
+<pre><code class="lang-sh">./assembly.bin/stop.sh
 </code></pre>
 <p>&#x91CD;&#x542F;:</p>
-<pre><code class="lang-sh">./bin/restart.sh
+<pre><code class="lang-sh">./assembly.bin/restart.sh
 </code></pre>
 <p>&#x8C03;&#x8BD5;:</p>
-<pre><code class="lang-sh">./bin/start.sh debug
+<pre><code class="lang-sh">./assembly.bin/start.sh debug
 </code></pre>
 <p>&#x7CFB;&#x7EDF;&#x72B6;&#x6001;:</p>
-<pre><code class="lang-sh">./bin/dump.sh
+<pre><code class="lang-sh">./assembly.bin/dump.sh
 </code></pre>
 <p>&#x603B;&#x63A7;&#x5165;&#x53E3;:</p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
+<pre><code class="lang-sh">./assembly.bin/server.sh start
+./assembly.bin/server.sh stop
+./assembly.bin/server.sh restart
+./assembly.bin/server.sh debug
+./assembly.bin/server.sh dump
 </code></pre>
 <p>&#x6807;&#x51C6;&#x8F93;&#x51FA;:</p>
 <pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
@@ -339,7 +340,7 @@ <h2 id="&#x6CE8;&#x610F;&#x4E8B;&#x9879;">&#x6CE8;&#x610F;&#x4E8B;&#x9879;</h2>
 <p>Simple Monitor &#x91C7;&#x7528;&#x78C1;&#x76D8;&#x5B58;&#x50A8;&#x7EDF;&#x8BA1;&#x4FE1;&#x606F;&#xFF0C;&#x8BF7;&#x6CE8;&#x610F;&#x5B89;&#x88C5;&#x673A;&#x5668;&#x7684;&#x78C1;&#x76D8;&#x9650;&#x5236;&#xFF0C;&#x5982;&#x679C;&#x8981;&#x96C6;&#x7FA4;&#xFF0C;&#x5EFA;&#x8BAE;&#x7528;mount&#x5171;&#x4EAB;&#x78C1;&#x76D8;&#x3002;</p>
 <p>charts &#x76EE;&#x5F55;&#x5FC5;&#x987B;&#x653E;&#x5728; <code>jetty.directory</code> &#x4E0B;&#xFF0C;&#x5426;&#x5219;&#x9875;&#x9762;&#x4E0A;&#x8BBF;&#x95EE;&#x4E0D;&#x4E86;&#x3002;</p>
 <blockquote id="fn_1">
-<sup>1</sup>. &#x8BF7;&#x53C2;&#x8003; <a href="https://dubbo.gitbooks.io/dubbo-user-book/content/references/telnet.html" target="_blank">Telnet &#x547D;&#x4EE4;&#x53C2;&#x8003;&#x624B;&#x518C;</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
+<sup>1</sup>. &#x8BF7;&#x53C2;&#x8003; <a href="http://dubbo.apache.org/books/dubbo-user-book/references/telnet.html" target="_blank">Telnet &#x547D;&#x4EE4;&#x53C2;&#x8003;&#x624B;&#x518C;</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
 </blockquote>
 
                                 
@@ -384,7 +385,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"next":{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"previous":{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-monitor-center.md","mtime":"2017-12-26T02:27:58.958Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"next":{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"previous":{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"path":"install/simple-registry-center.md","ref":"install/simple-registry-center.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-monitor-center.md","mtime":"2018-04-13T06:52:30.928Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/simple-registry-center.html b/books/dubbo-admin-book/install/simple-registry-center.html
index 7d370ec0..4f7fadfd 100644
--- a/books/dubbo-admin-book/install/simple-registry-center.html
+++ b/books/dubbo-admin-book/install/simple-registry-center.html
@@ -292,34 +292,35 @@ <h1>
                                 <h1 id="simple-&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;">Simple &#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;</h1>
 <p>Simple Registry &#x6CA1;&#x6709;&#x7ECF;&#x8FC7;&#x4E25;&#x683C;&#x6D4B;&#x8BD5;&#xFF0C;&#x53EF;&#x80FD;&#x4E0D;&#x5065;&#x72B6;&#xFF0C;&#x5E76;&#x4E14;&#x4E0D;&#x652F;&#x6301;&#x96C6;&#x7FA4;&#xFF0C;&#x4E0D;&#x5EFA;&#x8BAE;&#x7528;&#x4E8E;&#x751F;&#x4EA7;&#x73AF;&#x5883;&#x3002;</p>
 <p>&#x5B89;&#x88C5;:</p>
-<pre><code class="lang-sh">wget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-registry-simple/2.4.1/dubbo-registry-simple-2.4.1-assembly.tar.gz
-tar zxvf dubbo-registry-simple-2.4.1-assembly.tar.gz
-<span class="hljs-built_in">cd</span> dubbo-registry-simple-2.4.1
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo-ops
+<span class="hljs-built_in">cd</span> incubator-dubbo-ops &amp;&amp; mvn package
+<span class="hljs-built_in">cd</span> dubbo-registry-simple/target &amp;&amp; tar xvf dubbo-registry-simple-2.0.0-assembly.tar.gz
+<span class="hljs-built_in">cd</span> dubbo-registry-simple-2.0.0
 </code></pre>
 <p>&#x914D;&#x7F6E;:</p>
 <pre><code class="lang-sh">vi conf/dubbo.properties
 </code></pre>
 <p>&#x542F;&#x52A8;:</p>
-<pre><code class="lang-sh">./bin/start.sh
+<pre><code class="lang-sh">./assembly.bin/start.sh
 </code></pre>
 <p>&#x505C;&#x6B62;:</p>
-<pre><code class="lang-sh">./bin/stop.sh
+<pre><code class="lang-sh">./assembly.bin/stop.sh
 </code></pre>
 <p>&#x91CD;&#x542F;:</p>
-<pre><code class="lang-sh">./bin/restart.sh
+<pre><code class="lang-sh">./assembly.bin/restart.sh
 </code></pre>
 <p>&#x8C03;&#x8BD5;:</p>
-<pre><code class="lang-sh">./bin/start.sh debug
+<pre><code class="lang-sh">./assembly.bin/start.sh debug
 </code></pre>
 <p>&#x7CFB;&#x7EDF;&#x72B6;&#x6001;:</p>
-<pre><code class="lang-sh">./bin/dump.sh
+<pre><code class="lang-sh">./assembly.bin/dump.sh
 </code></pre>
 <p>&#x603B;&#x63A7;&#x5165;&#x53E3;:</p>
-<pre><code class="lang-sh">./bin/server.sh start
-./bin/server.sh stop
-./bin/server.sh restart
-./bin/server.sh debug
-./bin/server.sh dump
+<pre><code class="lang-sh">./assembly.bin/server.sh start
+./assembly.bin/server.sh stop
+./assembly.bin/server.sh restart
+./assembly.bin/server.sh debug
+./assembly.bin/server.sh dump
 </code></pre>
 <p>&#x6807;&#x51C6;&#x8F93;&#x51FA;:</p>
 <pre><code class="lang-sh">tail <span class="hljs-_">-f</span> logs/stdout.log
@@ -332,7 +333,7 @@ <h1 id="simple-&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;">Simple &#x6CE8;
 <pre><code class="lang-sh"><span class="hljs-built_in">echo</span> status | nc -i 1 127.0.0.1 9090
 </code></pre>
 <blockquote id="fn_1">
-<sup>1</sup>. &#x8BF7;&#x53C2;&#x8003; <a href="https://dubbo.gitbooks.io/dubbo-user-book/content/references/telnet.html" target="_blank">Telnet &#x547D;&#x4EE4;&#x53C2;&#x8003;&#x624B;&#x518C;</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
+<sup>1</sup>. &#x8BF7;&#x53C2;&#x8003; <a href="http://dubbo.apache.org/books/dubbo-user-book/references/telnet.html" target="_blank">Telnet &#x547D;&#x4EE4;&#x53C2;&#x8003;&#x624B;&#x518C;</a><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
 </blockquote>
 
                                 
@@ -377,7 +378,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"next":{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"previous":{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-registry-center.md","mtime":"2017-12-26T02:27:58.958Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.5 Simple 注册中心安装","level":"1.2.5","depth":2,"next":{"title":"1.6 Simple 监控中心安装","level":"1.2.6","depth":2,"path":"install/simple-monitor-center.md","ref":"install/simple-monitor-center.md","articles":[]},"previous":{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/simple-registry-center.md","mtime":"2018-04-13T06:52:30.929Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/install/zookeeper.html b/books/dubbo-admin-book/install/zookeeper.html
index 7ae65c01..af8bba94 100644
--- a/books/dubbo-admin-book/install/zookeeper.html
+++ b/books/dubbo-admin-book/install/zookeeper.html
@@ -293,7 +293,7 @@ <h1 id="zookeeper-&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5B89;&#x88C5;">Zookeeper &#
 <p>&#x5EFA;&#x8BAE;&#x4F7F;&#x7528; <code>dubbo-2.3.3</code> &#x4EE5;&#x4E0A;&#x7248;&#x672C;&#x7684; zookeeper <sup><a href="#fn_1" id="reffn_1">1</a></sup> &#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5BA2;&#x6237;&#x7AEF;&#x3002;</p>
 <p>Dubbo &#x672A;&#x5BF9; Zookeeper &#x670D;&#x52A1;&#x5668;&#x7AEF;&#x505A;&#x4EFB;&#x4F55;&#x4FB5;&#x5165;&#x4FEE;&#x6539;&#xFF0C;&#x53EA;&#x9700;&#x5B89;&#x88C5;&#x539F;&#x751F;&#x7684; Zookeeper &#x670D;&#x52A1;&#x5668;&#x5373;&#x53EF;&#xFF0C;&#x6240;&#x6709;&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x903B;&#x8F91;&#x9002;&#x914D;&#x90FD;&#x5728;&#x8C03;&#x7528; Zookeeper &#x5BA2;&#x6237;&#x7AEF;&#x65F6;&#x5B8C;&#x6210;&#x3002;</p>
 <p>&#x5B89;&#x88C5;:</p>
-<pre><code class="lang-sh">wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
+<pre><code class="lang-sh">wget http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
 tar zxvf zookeeper-3.3.3.tar.gz
 <span class="hljs-built_in">cd</span> zookeeper-3.3.3
 cp conf/zoo_sample.cfg conf/zoo.cfg
@@ -400,7 +400,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"next":{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"previous":{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/zookeeper.md","mtime":"2017-12-26T02:27:58.958Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1.3 Zookeeper 注册中心安装","level":"1.2.3","depth":2,"next":{"title":"1.4 Redis 注册中心安装","level":"1.2.4","depth":2,"path":"install/redis.md","ref":"install/redis.md","articles":[]},"previous":{"title":"1.2 示例消费者安装","level":"1.2.2","depth":2,"path":"install/consumer-demo.md","ref":"install/consumer-demo.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"install/zookeeper.md","mtime":"2018-05-07T09:00:46.452Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/ops/dubbo-ops.html b/books/dubbo-admin-book/ops/dubbo-ops.html
index 6b18ecb7..2d62593e 100644
--- a/books/dubbo-admin-book/ops/dubbo-ops.html
+++ b/books/dubbo-admin-book/ops/dubbo-ops.html
@@ -348,7 +348,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"previous":{"title":"2 运维手册","level":"1.3","depth":1,"path":"ops/introduction.md","ref":"ops/introduction.md","articles":[{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/dubbo-ops.md","mtime":"2017-12-26T02:27:58.959Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"previous":{"title":"2 运维手册","level":"1.3","depth":1,"path":"ops/introduction.md","ref":"ops/introduction.md","articles":[{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/dubbo-ops.md","mtime":"2018-03-19T06:46:50.830Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/ops/introduction.html b/books/dubbo-admin-book/ops/introduction.html
index baa4541d..cac2247f 100644
--- a/books/dubbo-admin-book/ops/introduction.html
+++ b/books/dubbo-admin-book/ops/introduction.html
@@ -333,7 +333,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"2 运维手册","level":"1.3","depth":1,"next":{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]},"previous":{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/introduction.md","mtime":"2017-12-26T02:27:58.960Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:18.141Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"2 运维手册","level":"1.3","depth":1,"next":{"title":"2.1 管理控制台运维","level":"1.3.1","depth":2,"path":"ops/dubbo-ops.md","ref":"ops/dubbo-ops.md","articles":[]},"previous":{"title":"1.7 管理控制台安装","level":"1.2.7","depth":2,"path":"install/admin-console.md","ref":"install/admin-console.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"ops/introduction.md","mtime":"2018-03-19T06:46:50.830Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:51:47.111Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-admin-book/search_index.json b/books/dubbo-admin-book/search_index.json
index e28cf04b..1e86661f 100644
--- a/books/dubbo-admin-book/search_index.json
+++ b/books/dubbo-admin-book/search_index.json
@@ -1 +1 @@
-{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["dubbo","introduct","注册中心、管理控制台的安装和使用。","这篇文档详细讲解了"],"install/introduction.html":["1","1.","127.0.0.1,也不能配成机器的","239.255.255.255","conf/dubbo.properti","conf/dubbo.properties,将","consum","consumer,simpl","consumer,它们缺省配置为通过","consumer,并展示出它们的依赖关系,以及它们之间调用的次数和时间。","consumer,来验证软负载均衡,demo","d","demo","dubbo.protocol.port","dubbo.registry.address","dubbo://127.0.0.1:9090","ip","monitor","multicast","multicast://224.5.6.7:1234?unicast=false,否则发给消费者的单播消息可能被提供者抢占,两个消费者在同一台机器也一样,只有","proivder,demo","provid","redi","redis://127.0.0.1:6379,如果换成","registri","registry,值改为","simpl","unicast=false:即:","zookeep","zookeeper://127.0.0.1:2181,同理,如果换成","↩","三者安装目录下的","之间的任意地址","你也可以增加运行","你也可以将","你也可以运行多个","你可以只运行","到","可以直接启动多个实例,而多个","后,修改","和","因有端口冲突,可在不同机器上运行,或者修改","地址不能配成","地址,必须是","安装手册","安装目录下","推荐使用","段广播地址,也就是:224.0.0.0","注册中心","注册中心广播互相发现,建议在不同机器上运行,如果在同一机器上,需设置","注册中心广播发现","注册中心换成","注册中心有此问题。","注册中心,安装","注意:multicast","的值。","的值改为","监控中心,它缺省配置为通过","配置中的"],"install/provider-demo.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1","1.","1.1","127.0.0.1","1:","2.4.1","20880","assembly.tar.gz","cd","conf/dubbo.properti","debug","demo","dubbo","dump","echo","f","help","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","logs/stdout.log","nc","provid","provider/2.4.1/dubbo","restart","start","statu","stop","tail","tar","telnet","vi","wget","zxvf","|","↩","停止:","启动:","命令参考手册","命令行","安装:","总控入口:","或者:","标准输出:","示例提供者安装","系统状态:","请参考","调试:","配置:","重启:"],"install/consumer-demo.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1.2","2.4.1","assembly.tar.gz","cd","conf/dubbo.properti","consum","consumer/2.4.1/dubbo","debug","demo","dubbo","dump","f","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","logs/stdout.log","restart","start","stop","tail","tar","vi","wget","zxvf","停止:","启动:","安装:","总控入口:","标准输出:","示例消费者安装","系统状态:","调试:","配置:","重启:"],"install/zookeeper.html":["./bin/zkserver.sh","1","1.","1.3","127.0.0.1","1,第二台的内容为","2.","2.3.3","2181","2,内容如下:","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","4","4.","5.","5:","apach","cd","clientport=2181","conf/zoo.cfg","conf/zoo_sample.cfg","cp","data","datadir","datadir=/home/dubbo/zookeep","dubbo","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dump","echo","hadoop","http://www.apache.org/dist//zookeeper/zookeep","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","id,对应上面","initlimit=10","mkdir","myid","nc","server","server.","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","start","stop","synclimit=5","tar","telnet","ticktime=2000","vi","wget","zoo.cfg","zookeep","zookeeper是","zxvf","|","↩","上面","下放置","中","中的","以上版本的","停止:","其中","后的数字,第一台的内容为","启动:","命令行","地址需改成你真实部署机器的信息","如果不需要集群,zoo.cfg","如果需要集群,zoo.cfg","安装:","客户端时完成。","并在","建议使用","或者:","指明自己的","文件:","服务器即可,所有注册中心逻辑适配都在调用","服务器端做任何侵入修改,只需安装原生的","未对","注册中心安装","注册中心客户端。","用法:","的内容如下","的子项目,强度相对较好,建议生产环境使用该注册中心","目录","目录和","目录需改成你真实输出目录","配置:"],"install/redis.html":["&","./src/redi","/dubbo/com.foo.barservice/provid","1","1.","1.4","127.0.0.1","2","2.","2.1.0","2.4.8","2.4.8.tar.gz","3.","3:","6379","cd","cli","conf/dubbo.properti","consum","dubbo.registry.addrss","hgetal","http://redis.googlecode.com/files/redi","http://redis.io/command","killal","kv","make","nohup","provid","redi","redis.conf","redis://127.0.0.1:6379","server","tar","telnet","vi","wget","xzf","↩","中的","以上版本支持","使用方式参见:","停止:","即可使用。","参见:","只需搭一个原生的","启动:","命令行","和","存储服务器,参见:http://redis.io/topics/quickstart","安装:","或者:","是一个高效的","服务器,并将快速启动中","注册中心参考手册。","注册中心安装","注册中心集群","的值改为","配置:","采用在客户端同时写入多个服务器,读取单个服务器的策略实现。","里的"],"install/simple-registry-center.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1","1.","1.5","127.0.0.1","1:","2.4.1","9090","assembly.tar.gz","cd","conf/dubbo.properti","debug","dubbo","dump","echo","f","help","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","logs/stdout.log","nc","registri","restart","simpl","simple/2.4.1/dubbo","start","statu","stop","tail","tar","telnet","vi","wget","zxvf","|","↩","停止:","启动:","命令参考手册","命令行","安装:","总控入口:","或者:","标准输出:","没有经过严格测试,可能不健状,并且不支持集群,不建议用于生产环境。","注册中心安装","系统状态:","请参考","调试:","配置:","重启:"],"install/simple-monitor-center.html":["./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/start.sh","./bin/stop.sh","1","1.","1.6","127.0.0.1","1:","2.4.1","7070","assembly.tar.gz","cd","chart","conf/dubbo.properti","consum","debug","dubbo","dump","echo","f","help","http://127.0.0.1:8080","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","jetty.directori","logs/stdout.log","monitor","nc","provid","restart","simpl","simple/2.4.1/dubbo","start","statu","stop","tail","tar","telnet","vi","wget","zxvf","|","↩","下,否则页面上访问不了。","之间的调用,所以用于生产环境不会有风险。","停止:","启动:","命令参考手册","命令行","和","安装:","安装步骤","总控入口:","或者:","挂掉不会影响到","标准输出:","注意事项","监控中心安装","目录必须放在","系统状态:","访问:","请参考","调试:","配置:","采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。","重启:"],"install/admin-console.html":["./bin/shutdown.sh","./bin/startup.sh","1.","1.7","1:","2.","2.4.1.war","2:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","admin","admin/2.4.1/dubbo","apach","cd","d","dubbo","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.properti","dubbo.registry.address=zookeeper://127.0.0.1:2181","guest","guest,","http://127.0.0.1:8080/","http://apache.etoak.com/tomcat/tomcat","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","inf/dubbo.properti","rf","rm","root","root,","tar","tomcat","unzip","vi","webapps/root","webapps/root/web","wget","zxvf","↩","停止:","启动:","安装:","密码:","或将","或者","放在当前用户目录下","用户:","管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。","管理控制台安装","访问","配置"],"ops/introduction.html":["2","运维手册"],"ops/dubbo-ops.html":["2.1","dubbo","动态配置","当你需要管理","搜索页面","服务应用页面","服务提供者页面","服务注册","服务消费者页面","服务负责人","服务降级","权重调节","添加动态配置页面","添加路由规则页面","的服务时,首先要搜索到这个服务,然后打开它的管理页面","管理控制台运维","访问控制","负载均衡","路由规则"]},"length":11},"tokenStore":{"root":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02857142857142857},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.02702702702702703},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02247191011235955}},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"能":{"docs":{},"配":{"docs":{},"成":{"docs":{},"机":{"docs":{},"器":{"docs":{},"的":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":5.012658227848101},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}},".":{"1":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":5}}},"2":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":5}}},"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":3.333333333333333}}},"4":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":3.333333333333333}}},"5":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":3.333333333333333}}},"6":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":3.333333333333333}}},"7":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":5}}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},",":{"docs":{},"第":{"docs":{},"二":{"docs":{},"台":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}},"2":{"0":{"8":{"8":{"0":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02857142857142857}}},"docs":{}},"docs":{}},"docs":{}},"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}},"3":{"9":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"ops/introduction.html":{"ref":"ops/introduction.html","tf":5}},".":{"1":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":5}},".":{"0":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}},"docs":{}}},"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}}},"4":{"docs":{},".":{"1":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.04285714285714286},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.05555555555555555},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.04054054054054054},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.033707865168539325}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}}}}}},"8":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02666666666666667}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}},"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}},"4":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"5":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}},"docs":{}},"docs":{}},"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"/":{"docs":{},"v":{"6":{"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}}},"7":{"0":{"7":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02247191011235955}}},"docs":{}},"docs":{}},"docs":{}},"9":{"0":{"9":{"0":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.02702702702702703}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.3333333333333333},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02857142857142857},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.037037037037037035},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.02702702702702703},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02247191011235955},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}},"=":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},"?":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"9":{"0":{"9":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"m":{"docs":{},"p":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.08860759493670886},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.05714285714285714},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.07407407407407407}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02857142857142857},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.037037037037037035},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.02702702702702703},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02247191011235955}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.032}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},"=":{"docs":{},"/":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":10}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"1":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}}}}}}}}},"f":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}}}}}}}},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"d":{"docs":{},",":{"docs":{},"对":{"docs":{},"应":{"docs":{},"上":{"docs":{},"面":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}},"、":{"docs":{},"管":{"docs":{},"理":{"docs":{},"控":{"docs":{},"制":{"docs":{},"台":{"docs":{},"的":{"docs":{},"安":{"docs":{},"装":{"docs":{},"和":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.3333333333333333}}}}}}}}}}}}}}},"广":{"docs":{},"播":{"docs":{},"互":{"docs":{},"相":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"在":{"docs":{},"不":{"docs":{},"同":{"docs":{},"机":{"docs":{},"器":{"docs":{},"上":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"在":{"docs":{},"同":{"docs":{},"一":{"docs":{},"机":{"docs":{},"器":{"docs":{},"上":{"docs":{},",":{"docs":{},"需":{"docs":{},"设":{"docs":{},"置":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"现":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"换":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}},"有":{"docs":{},"此":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}},",":{"docs":{},"安":{"docs":{},"装":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}},"安":{"docs":{},"装":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":3.341333333333333},"install/redis.html":{"ref":"install/redis.html","tf":3.3466666666666662},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":3.3468468468468466}}}},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"。":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}},"参":{"docs":{},"考":{"docs":{},"手":{"docs":{},"册":{"docs":{},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}},"集":{"docs":{},"群":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}},"意":{"docs":{},":":{"docs":{},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"事":{"docs":{},"项":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}},"这":{"docs":{},"篇":{"docs":{},"文":{"docs":{},"档":{"docs":{},"详":{"docs":{},"细":{"docs":{},"讲":{"docs":{},"解":{"docs":{},"了":{"docs":{"./":{"ref":"./","tf":0.3333333333333333}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"将":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.05555555555555555},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"s":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}},"它":{"docs":{},"们":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"配":{"docs":{},"置":{"docs":{},"为":{"docs":{},"通":{"docs":{},"过":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}},"并":{"docs":{},"展":{"docs":{},"示":{"docs":{},"出":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"它":{"docs":{},"们":{"docs":{},"之":{"docs":{},"间":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},"和":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"验":{"docs":{},"证":{"docs":{},"软":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}},"l":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.02531645569620253},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.06741573033707865}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.05063291139240506}},":":{"docs":{},"/":{"docs":{},"/":{"2":{"2":{"4":{"docs":{},".":{"5":{"docs":{},".":{"6":{"docs":{},".":{"7":{"docs":{},":":{"1":{"2":{"3":{"4":{"docs":{},"?":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"发":{"docs":{},"给":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"的":{"docs":{},"单":{"docs":{},"播":{"docs":{},"消":{"docs":{},"息":{"docs":{},"可":{"docs":{},"能":{"docs":{},"被":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"抢":{"docs":{},"占":{"docs":{},",":{"docs":{},"两":{"docs":{},"个":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"在":{"docs":{},"同":{"docs":{},"一":{"docs":{},"台":{"docs":{},"机":{"docs":{},"器":{"docs":{},"也":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}},"k":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}},"y":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.024}}}}},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"i":{"docs":{},"v":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.06329113924050633},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.04285714285714286},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}},"e":{"docs":{},"r":{"docs":{},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/redis.html":{"ref":"install/redis.html","tf":3.453333333333333}},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"换":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02666666666666667}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.06756756756756757}}},"y":{"docs":{},",":{"docs":{},"值":{"docs":{},"改":{"docs":{},"为":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.02531645569620253}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}},"f":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}},"m":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}},"s":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.02531645569620253},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":3.4009009009009006},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":3.400749063670412}},"e":{"docs":{},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}},"t":{"docs":{},"u":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"o":{"docs":{},"p":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.02666666666666667}},".":{"1":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},":":{"docs":{},"即":{"docs":{},":":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}},"z":{"docs":{},"i":{"docs":{},"p":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.0379746835443038},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":3.389333333333333}},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},",":{"docs":{},"同":{"docs":{},"理":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"换":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}},"是":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}},"x":{"docs":{},"v":{"docs":{},"f":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}},"↩":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.04},"install/redis.html":{"ref":"install/redis.html","tf":0.04},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}},"三":{"docs":{},"者":{"docs":{},"安":{"docs":{},"装":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"的":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"任":{"docs":{},"意":{"docs":{},"地":{"docs":{},"址":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"用":{"docs":{},"于":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"不":{"docs":{},"会":{"docs":{},"有":{"docs":{},"风":{"docs":{},"险":{"docs":{},"。":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"增":{"docs":{},"加":{"docs":{},"运":{"docs":{},"行":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"将":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"运":{"docs":{},"行":{"docs":{},"多":{"docs":{},"个":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"只":{"docs":{},"运":{"docs":{},"行":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}},"到":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"启":{"docs":{},"动":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"而":{"docs":{},"多":{"docs":{},"个":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}},"后":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}},"的":{"docs":{},"数":{"docs":{},"字":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"台":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}},"和":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.0379746835443038},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}},"因":{"docs":{},"有":{"docs":{},"端":{"docs":{},"口":{"docs":{},"冲":{"docs":{},"突":{"docs":{},",":{"docs":{},"可":{"docs":{},"在":{"docs":{},"不":{"docs":{},"同":{"docs":{},"机":{"docs":{},"器":{"docs":{},"上":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"修":{"docs":{},"改":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"址":{"docs":{},"不":{"docs":{},"能":{"docs":{},"配":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"需":{"docs":{},"改":{"docs":{},"成":{"docs":{},"你":{"docs":{},"真":{"docs":{},"实":{"docs":{},"部":{"docs":{},"署":{"docs":{},"机":{"docs":{},"器":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{},"手":{"docs":{},"册":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":5.012658227848101}}}},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}},"步":{"docs":{},"骤":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"段":{"docs":{},"广":{"docs":{},"播":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},":":{"2":{"2":{"4":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"改":{"docs":{},"为":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}},"内":{"docs":{},"容":{"docs":{},"如":{"docs":{},"下":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}},"子":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"强":{"docs":{},"度":{"docs":{},"相":{"docs":{},"对":{"docs":{},"较":{"docs":{},"好":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"使":{"docs":{},"用":{"docs":{},"该":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"时":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"要":{"docs":{},"搜":{"docs":{},"索":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"打":{"docs":{},"开":{"docs":{},"它":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}}}}}}}}}}}}}}}}}}}}}},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"它":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"配":{"docs":{},"置":{"docs":{},"为":{"docs":{},"通":{"docs":{},"过":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":3.3445692883895126}}}}}}}},"配":{"docs":{},"置":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}},"中":{"docs":{},"的":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.07142857142857142},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.09259259259259259},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.06756756756756757},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.056179775280898875}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02857142857142857},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.037037037037037035},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.02702702702702703},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02247191011235955}}}}},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}},"h":{"docs":{},"u":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}},"z":{"docs":{},"k":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}}}}}}}}}}},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02666666666666667}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02857142857142857},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.037037037037037035},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.02702702702702703},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02247191011235955}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}}}}},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}},"/":{"2":{"docs":{},".":{"4":{"docs":{},".":{"1":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}},"f":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.037037037037037035},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"8":{"0":{"8":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}},"/":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"m":{"docs":{},"v":{"docs":{},"n":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"w":{"docs":{},"w":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}}}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"a":{"docs":{},"k":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"o":{"docs":{},"o":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02666666666666667}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.037037037037037035},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}},"n":{"docs":{},"c":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}},"o":{"docs":{},"h":{"docs":{},"u":{"docs":{},"p":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.037037037037037035},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}},"r":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.02857142857142857},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.02702702702702703},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02247191011235955}}}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"2":{"0":{"0":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.047619047619047616}}}}}}}},"v":{"docs":{},"i":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}},"w":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}}}},"e":{"docs":{},"b":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}}}}}}},"|":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}},"停":{"docs":{},"止":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}},"启":{"docs":{},"动":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}},"命":{"docs":{},"令":{"docs":{},"参":{"docs":{},"考":{"docs":{},"手":{"docs":{},"册":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}},"行":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"总":{"docs":{},"控":{"docs":{},"入":{"docs":{},"口":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}},"或":{"docs":{},"者":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}},"将":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}},"示":{"docs":{},"例":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"安":{"docs":{},"装":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":5.014285714285714}}}}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"安":{"docs":{},"装":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":5.018518518518518}}}}}}}}},"系":{"docs":{},"统":{"docs":{},"状":{"docs":{},"态":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}},"请":{"docs":{},"参":{"docs":{},"考":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"调":{"docs":{},"试":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"重":{"docs":{},"启":{"docs":{},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.014285714285714285}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.018518518518518517},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}},"上":{"docs":{},"面":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"下":{"docs":{},"放":{"docs":{},"置":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"页":{"docs":{},"面":{"docs":{},"上":{"docs":{},"访":{"docs":{},"问":{"docs":{},"不":{"docs":{},"了":{"docs":{},"。":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}}}}}}},"中":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}},"以":{"docs":{},"上":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"支":{"docs":{},"持":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}},"其":{"docs":{},"中":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"时":{"docs":{},"完":{"docs":{},"成":{"docs":{},"。":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}},"并":{"docs":{},"在":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}},"指":{"docs":{},"明":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}},"文":{"docs":{},"件":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"即":{"docs":{},"可":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"适":{"docs":{},"配":{"docs":{},"都":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}},"端":{"docs":{},"做":{"docs":{},"任":{"docs":{},"何":{"docs":{},"侵":{"docs":{},"入":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"安":{"docs":{},"装":{"docs":{},"原":{"docs":{},"生":{"docs":{},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"将":{"docs":{},"快":{"docs":{},"速":{"docs":{},"启":{"docs":{},"动":{"docs":{},"中":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}}}},"应":{"docs":{},"用":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}},"注":{"docs":{},"册":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}},"负":{"docs":{},"责":{"docs":{},"人":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}},"降":{"docs":{},"级":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"未":{"docs":{},"对":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"用":{"docs":{},"法":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"户":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}}}},"目":{"docs":{},"录":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},"和":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"需":{"docs":{},"改":{"docs":{},"成":{"docs":{},"你":{"docs":{},"真":{"docs":{},"实":{"docs":{},"输":{"docs":{},"出":{"docs":{},"目":{"docs":{},"录":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"放":{"docs":{},"在":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}},"&":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"k":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}},"v":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}},"x":{"docs":{},"z":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}},"参":{"docs":{},"见":{"docs":{},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}},"只":{"docs":{},"需":{"docs":{},"搭":{"docs":{},"一":{"docs":{},"个":{"docs":{},"原":{"docs":{},"生":{"docs":{},"的":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}}},"存":{"docs":{},"储":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},",":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},"/":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}},"采":{"docs":{},"用":{"docs":{},"在":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"同":{"docs":{},"时":{"docs":{},"写":{"docs":{},"入":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},",":{"docs":{},"读":{"docs":{},"取":{"docs":{},"单":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"的":{"docs":{},"策":{"docs":{},"略":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"磁":{"docs":{},"盘":{"docs":{},"存":{"docs":{},"储":{"docs":{},"统":{"docs":{},"计":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},"安":{"docs":{},"装":{"docs":{},"机":{"docs":{},"器":{"docs":{},"的":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"限":{"docs":{},"制":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"用":{"docs":{},"m":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"共":{"docs":{},"享":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"。":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"里":{"docs":{},"的":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.013333333333333334}}}},"没":{"docs":{},"有":{"docs":{},"经":{"docs":{},"过":{"docs":{},"严":{"docs":{},"格":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"健":{"docs":{},"状":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"不":{"docs":{},"建":{"docs":{},"议":{"docs":{},"用":{"docs":{},"于":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"。":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}}}}}}}}}},"挂":{"docs":{},"掉":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{},"到":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}}}}}}}},"访":{"docs":{},"问":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}},":":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.011235955056179775}}},"控":{"docs":{},"制":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}},"密":{"docs":{},"码":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.031746031746031744}}}}},"放":{"docs":{},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{},"用":{"docs":{},"户":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}},"管":{"docs":{},"理":{"docs":{},"控":{"docs":{},"制":{"docs":{},"台":{"docs":{},"为":{"docs":{},"内":{"docs":{},"部":{"docs":{},"裁":{"docs":{},"剪":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"开":{"docs":{},"源":{"docs":{},"部":{"docs":{},"分":{"docs":{},"主":{"docs":{},"要":{"docs":{},"包":{"docs":{},"含":{"docs":{},":":{"docs":{},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"动":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"降":{"docs":{},"级":{"docs":{},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},",":{"docs":{},"权":{"docs":{},"重":{"docs":{},"调":{"docs":{},"整":{"docs":{},",":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{},"等":{"docs":{},"管":{"docs":{},"理":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.015873015873015872}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":5.015873015873016}}}},"运":{"docs":{},"维":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":5.055555555555555}}}}}}}}},"运":{"docs":{},"维":{"docs":{},"手":{"docs":{},"册":{"docs":{"ops/introduction.html":{"ref":"ops/introduction.html","tf":6}}}}}},"动":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"当":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"管":{"docs":{},"理":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}},"搜":{"docs":{},"索":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"权":{"docs":{},"重":{"docs":{},"调":{"docs":{},"节":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"添":{"docs":{},"加":{"docs":{},"动":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}}}},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}},"length":499},"corpusTokens":["&","./bin/dump.sh","./bin/restart.sh","./bin/server.sh","./bin/shutdown.sh","./bin/start.sh","./bin/startup.sh","./bin/stop.sh","./bin/zkserver.sh","./src/redi","/dubbo/com.foo.barservice/provid","1","1.","1.1","1.2","1.3","1.4","1.5","1.6","1.7","127.0.0.1","127.0.0.1,也不能配成机器的","1:","1,第二台的内容为","1:","2","2.","2.1","2.1.0","2.3.3","2.4.1","2.4.1.war","2.4.8","2.4.8.tar.gz","20880","2181","239.255.255.255","2:","2,内容如下:","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","3:","4","4.","5.","5:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","6379","7070","9090","admin","admin/2.4.1/dubbo","apach","assembly.tar.gz","cd","chart","cli","clientport=2181","conf/dubbo.properti","conf/dubbo.properties,将","conf/zoo.cfg","conf/zoo_sample.cfg","consum","consumer/2.4.1/dubbo","consumer,simpl","consumer,它们缺省配置为通过","consumer,并展示出它们的依赖关系,以及它们之间调用的次数和时间。","consumer,来验证软负载均衡,demo","cp","d","data","datadir","datadir=/home/dubbo/zookeep","debug","demo","dubbo","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.properti","dubbo.protocol.port","dubbo.registry.address","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dubbo.registry.address=zookeeper://127.0.0.1:2181","dubbo.registry.addrss","dubbo://127.0.0.1:9090","dump","echo","f","guest","guest,","hadoop","help","hgetal","http://127.0.0.1:8080","http://127.0.0.1:8080/","http://apache.etoak.com/tomcat/tomcat","http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo","http://redis.googlecode.com/files/redi","http://redis.io/command","http://www.apache.org/dist//zookeeper/zookeep","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","id,对应上面","inf/dubbo.properti","initlimit=10","introduct","ip","jetty.directori","killal","kv","logs/stdout.log","make","mkdir","monitor","multicast","multicast://224.5.6.7:1234?unicast=false,否则发给消费者的单播消息可能被提供者抢占,两个消费者在同一台机器也一样,只有","myid","nc","nohup","proivder,demo","provid","provider/2.4.1/dubbo","redi","redis.conf","redis://127.0.0.1:6379","redis://127.0.0.1:6379,如果换成","registri","registry,值改为","restart","rf","rm","root","root,","server","server.","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","simpl","simple/2.4.1/dubbo","start","statu","stop","synclimit=5","tail","tar","telnet","ticktime=2000","tomcat","unicast=false:即:","unzip","vi","webapps/root","webapps/root/web","wget","xzf","zoo.cfg","zookeep","zookeeper://127.0.0.1:2181,同理,如果换成","zookeeper是","zxvf","|","↩","三者安装目录下的","上面","下放置","下,否则页面上访问不了。","中","中的","之间的任意地址","之间的调用,所以用于生产环境不会有风险。","以上版本支持","以上版本的","你也可以增加运行","你也可以将","你也可以运行多个","你可以只运行","使用方式参见:","停止:","停止:","其中","到","动态配置","即可使用。","参见:","只需搭一个原生的","可以直接启动多个实例,而多个","后的数字,第一台的内容为","后,修改","启动:","启动:","命令参考手册","命令行","和","因有端口冲突,可在不同机器上运行,或者修改","地址不能配成","地址需改成你真实部署机器的信息","地址,必须是","如果不需要集群,zoo.cfg","如果需要集群,zoo.cfg","存储服务器,参见:http://redis.io/topics/quickstart","安装:","安装手册","安装步骤","安装目录下","安装:","客户端时完成。","密码:","并在","建议使用","当你需要管理","总控入口:","总控入口:","或将","或者","或者:","或者:","挂掉不会影响到","指明自己的","推荐使用","搜索页面","放在当前用户目录下","文件:","是一个高效的","服务器即可,所有注册中心逻辑适配都在调用","服务器端做任何侵入修改,只需安装原生的","服务器,并将快速启动中","服务应用页面","服务提供者页面","服务注册","服务消费者页面","服务负责人","服务降级","未对","权重调节","标准输出:","标准输出:","段广播地址,也就是:224.0.0.0","没有经过严格测试,可能不健状,并且不支持集群,不建议用于生产环境。","注册中心","注册中心、管理控制台的安装和使用。","注册中心参考手册。","注册中心安装","注册中心客户端。","注册中心广播互相发现,建议在不同机器上运行,如果在同一机器上,需设置","注册中心广播发现","注册中心换成","注册中心有此问题。","注册中心集群","注册中心,安装","注意事项","注意:multicast","添加动态配置页面","添加路由规则页面","用户:","用法:","的值。","的值改为","的内容如下","的子项目,强度相对较好,建议生产环境使用该注册中心","的服务时,首先要搜索到这个服务,然后打开它的管理页面","监控中心安装","监控中心,它缺省配置为通过","目录","目录和","目录必须放在","目录需改成你真实输出目录","示例提供者安装","示例消费者安装","管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。","管理控制台安装","管理控制台运维","系统状态:","系统状态:","访问","访问:","访问控制","请参考","调试:","调试:","负载均衡","路由规则","运维手册","这篇文档详细讲解了","配置","配置:","配置中的","配置:","采用在客户端同时写入多个服务器,读取单个服务器的策略实现。","采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。","里的","重启:","重启:"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"这篇文档详细讲解了 dubbo 注册中心、管理控制台的安装和使用。\n"},"install/introduction.html":{"url":"install/introduction.html","title":"1 安装手册","keywords":"","body":"安装手册\n你可以只运行 Demo Provider 和 Demo Consumer,它们缺省配置为通过 Multicast  1 注册中心广播互相发现,建议在不同机器上运行,如果在同一机器上,需设置 unicast=false:即: multicast://224.5.6.7:1234?unicast=false,否则发给消费者的单播消息可能被提供者抢占,两个消费者在同一台机器也一样,只有 multicast 注册中心有此问题。\n你也可以运行多个 Demo Provider 和 Demo Consumer,来验证软负载均衡,Demo Consumer 可以直接启动多个实例,而多个 Demo Provider 因有端口冲突,可在不同机器上运行,或者修改 Demo Provider 安装目录下 conf/dubbo.properties 配置中的 dubbo.protocol.port 的值。\n你也可以增加运行 Simple Monitor 监控中心,它缺省配置为通过 Multicast 注册中心广播发现 Provider 和 Consumer,并展示出它们的依赖关系,以及它们之间调用的次数和时间。\n你也可以将 Multicast 注册中心换成 Zookeeper 注册中心,安装 Zookeeper Registry 后,修改 Demo Proivder,Demo Consumer,Simple Monitor 三者安装目录下的 conf/dubbo.properties,将 dubbo.registry.address 的值改为 zookeeper://127.0.0.1:2181,同理,如果换成 Redis Registry,值改为 redis://127.0.0.1:6379,如果换成 Simple Registry,值改为 dubbo://127.0.0.1:9090\n推荐使用 Zookeeper 注册中心\n\n1. 注意:multicast 地址不能配成 127.0.0.1,也不能配成机器的 IP 地址,必须是 D 段广播地址,也就是:224.0.0.0 到 239.255.255.255 之间的任意地址 ↩\n\n"},"install/provider-demo.html":{"url":"install/provider-demo.html","title":"1.1 示例提供者安装","keywords":"","body":"示例提供者安装\n安装:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-provider/2.4.1/dubbo-demo-provider-2.4.1-assembly.tar.gz\ntar zxvf dubbo-demo-provider-2.4.1-assembly.tar.gz\ncd dubbo-demo-provider-2.4.1\n\n配置:\nvi conf/dubbo.properties\n\n启动:\n./bin/start.sh\n\n停止:\n./bin/stop.sh\n\n重启:\n./bin/restart.sh\n\n调试:\n./bin/start.sh debug\n\n系统状态:\n./bin/dump.sh\n\n总控入口:\n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\n标准输出:\ntail -f logs/stdout.log\n\n命令行 1:\ntelnet 127.0.0.1 20880\nhelp\n\n或者:\necho status | nc -i 1 127.0.0.1 20880\n\n\n1. 请参考 Telnet 命令参考手册 ↩\n\n"},"install/consumer-demo.html":{"url":"install/consumer-demo.html","title":"1.2 示例消费者安装","keywords":"","body":"示例消费者安装\n安装:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-demo-consumer/2.4.1/dubbo-demo-consumer-2.4.1-assembly.tar.gz\ntar zxvf dubbo-demo-consumer-2.4.1-assembly.tar.gz\ncd dubbo-demo-consumer-2.4.1\n\n配置:\nvi conf/dubbo.properties\n\n启动:\n./bin/start.sh\ntail -f logs/stdout.log\n\n停止:\n./bin/stop.sh\n\n重启:\n./bin/restart.sh\n\n调试:\n./bin/start.sh debug\n\n系统状态:\n./bin/dump.sh\n\n总控入口:\n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\n标准输出:\ntail -f logs/stdout.log\n\n"},"install/zookeeper.html":{"url":"install/zookeeper.html","title":"1.3 Zookeeper 注册中心安装","keywords":"","body":"Zookeeper 注册中心安装\n建议使用 dubbo-2.3.3 以上版本的 zookeeper 1 注册中心客户端。\nDubbo 未对 Zookeeper 服务器端做任何侵入修改,只需安装原生的 Zookeeper 服务器即可,所有注册中心逻辑适配都在调用 Zookeeper 客户端时完成。\n安装:\nwget http://www.apache.org/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz\ntar zxvf zookeeper-3.3.3.tar.gz\ncd zookeeper-3.3.3\ncp conf/zoo_sample.cfg conf/zoo.cfg\n\n配置:\nvi conf/zoo.cfg\n\n如果不需要集群,zoo.cfg 的内容如下 2:\ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\n\n如果需要集群,zoo.cfg 的内容如下 3:\ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\nserver.1=10.20.153.10:2555:3555\nserver.2=10.20.153.11:2555:3555\n\n并在 data 目录 4 下放置 myid 文件:\nmkdir data\nvi myid\n\nmyid 指明自己的 id,对应上面 zoo.cfg 中 server. 后的数字,第一台的内容为 1,第二台的内容为 2,内容如下:\n1\n启动:\n./bin/zkServer.sh start\n\n停止:\n./bin/zkServer.sh stop\n\n命令行 5: \ntelnet 127.0.0.1 2181\ndump\n\n或者:\necho dump | nc 127.0.0.1 2181\n\n用法:\ndubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181\n\n或者:\n\n\n\n1. Zookeeper是 Apache Hadoop 的子项目,强度相对较好,建议生产环境使用该注册中心 ↩\n\n\n2. 其中 data 目录需改成你真实输出目录 ↩\n\n\n3. 其中 data 目录和 server 地址需改成你真实部署机器的信息 ↩\n\n\n4. 上面 zoo.cfg 中的 dataDir ↩\n\n\n5. http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html ↩\n\n"},"install/redis.html":{"url":"install/redis.html","title":"1.4 Redis 注册中心安装","keywords":"","body":"Redis 注册中心安装\nRedis 1 使用方式参见: Redis 注册中心参考手册。\n只需搭一个原生的 Redis 服务器,并将快速启动中 Provider 和 Consumer 里的 conf/dubbo.properties 中的 dubbo.registry.addrss 的值改为 redis://127.0.0.1:6379 即可使用。\nRedis 注册中心集群 2 采用在客户端同时写入多个服务器,读取单个服务器的策略实现。\n安装:\nwget http://redis.googlecode.com/files/redis-2.4.8.tar.gz\ntar xzf redis-2.4.8.tar.gz\ncd redis-2.4.8\nmake\n\n配置:\nvi redis.conf\n\n启动:\nnohup ./src/redis-server redis.conf &\n\n停止:\nkillall redis-server\n\n\n命令行 3:\n\n./src/redis-cli\nhgetall /dubbo/com.foo.BarService/providers\n\n或者:\ntelnet 127.0.0.1 6379\nhgetall /dubbo/com.foo.BarService/providers\n\n\n1. Redis 是一个高效的 KV 存储服务器,参见:http://redis.io/topics/quickstart ↩\n\n\n2. 2.1.0 以上版本支持 ↩\n\n\n3. 参见: http://redis.io/commands ↩\n\n"},"install/simple-registry-center.html":{"url":"install/simple-registry-center.html","title":"1.5 Simple 注册中心安装","keywords":"","body":"Simple 注册中心安装\nSimple Registry 没有经过严格测试,可能不健状,并且不支持集群,不建议用于生产环境。\n安装:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-registry-simple/2.4.1/dubbo-registry-simple-2.4.1-assembly.tar.gz\ntar zxvf dubbo-registry-simple-2.4.1-assembly.tar.gz\ncd dubbo-registry-simple-2.4.1\n\n配置:\nvi conf/dubbo.properties\n\n启动:\n./bin/start.sh\n\n停止:\n./bin/stop.sh\n\n重启:\n./bin/restart.sh\n\n调试:\n./bin/start.sh debug\n\n系统状态:\n./bin/dump.sh\n\n总控入口:\n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\n标准输出:\ntail -f logs/stdout.log\n\n命令行 1:\ntelnet 127.0.0.1 9090\nhelp\n\n或者:\necho status | nc -i 1 127.0.0.1 9090\n\n\n1. 请参考 Telnet 命令参考手册 ↩\n\n"},"install/simple-monitor-center.html":{"url":"install/simple-monitor-center.html","title":"1.6 Simple 监控中心安装","keywords":"","body":"Simple 监控中心安装\n安装步骤\n安装:\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-monitor-simple/2.4.1/dubbo-monitor-simple-2.4.1-assembly.tar.gz\ntar zxvf dubbo-monitor-simple-2.4.1-assembly.tar.gz\ncd dubbo-monitor-simple-2.4.1\n\n配置:\nvi conf/dubbo.properties\n\n启动:\n./bin/start.sh\n\n停止:\n./bin/stop.sh\n\n重启:\n./bin/restart.sh\n\n调试:\n./bin/start.sh debug\n\n系统状态:\n./bin/dump.sh\n\n总控入口:\n./bin/server.sh start\n./bin/server.sh stop\n./bin/server.sh restart\n./bin/server.sh debug\n./bin/server.sh dump\n\n标准输出:\ntail -f logs/stdout.log\n\n命令行 1:\ntelnet 127.0.0.1 7070\nhelp\n\n或者:\necho status | nc -i 1 127.0.0.1 7070\n\n访问:\nhttp://127.0.0.1:8080\n\n注意事项\nSimple Monitor 挂掉不会影响到 Consumer 和 Provider 之间的调用,所以用于生产环境不会有风险。\nSimple Monitor 采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。\ncharts 目录必须放在 jetty.directory 下,否则页面上访问不了。\n\n1. 请参考 Telnet 命令参考手册 ↩\n\n"},"install/admin-console.html":{"url":"install/admin-console.html","title":"1.7 管理控制台安装","keywords":"","body":"管理控制台安装\n管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。\n安装:\nwget http://apache.etoak.com/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz\ntar zxvf apache-tomcat-6.0.35.tar.gz\ncd apache-tomcat-6.0.35\nrm -rf webapps/ROOT\nwget http://code.alibabatech.com/mvn/releases/com/alibaba/dubbo-admin/2.4.1/dubbo-admin-2.4.1.war\nunzip dubbo-admin-2.4.1.war -d webapps/ROOT\n\n配置 1:\nvi webapps/ROOT/WEB-INF/dubbo.properties\ndubbo.properties\ndubbo.registry.address=zookeeper://127.0.0.1:2181\ndubbo.admin.root.password=root\ndubbo.admin.guest.password=guest\n\n启动:\n./bin/startup.sh\n\n停止:\n./bin/shutdown.sh\n\n访问 2:\nhttp://127.0.0.1:8080/\n\n1. 或将 dubbo.properties 放在当前用户目录下 ↩\n\n\n2. 用户: root, 密码: root 或者 用户: guest, 密码: guest ↩\n\n"},"ops/introduction.html":{"url":"ops/introduction.html","title":"2 运维手册","keywords":"","body":"运维手册\n"},"ops/dubbo-ops.html":{"url":"ops/dubbo-ops.html","title":"2.1 管理控制台运维","keywords":"","body":"管理控制台运维\n搜索页面\n当你需要管理 Dubbo 的服务时,首先要搜索到这个服务,然后打开它的管理页面\n\n服务提供者页面\n\n服务消费者页面\n\n服务应用页面\n\n添加路由规则页面\n\n添加动态配置页面\n\n服务注册\n服务降级\n路由规则\n访问控制\n动态配置\n权重调节\n负载均衡\n服务负责人\n"}}}
\ No newline at end of file
+{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["dubbo","introduct","注册中心、管理控制台的安装和使用。","这篇文档详细讲解了"],"install/introduction.html":["1","1.","127.0.0.1,也不能配成机器的","239.255.255.255","conf/dubbo.properti","conf/dubbo.properties,将","consum","consumer,simpl","consumer,它们缺省配置为通过","consumer,并展示出它们的依赖关系,以及它们之间调用的次数和时间。","consumer,来验证软负载均衡,demo","d","demo","dubbo.protocol.port","dubbo.registry.address","dubbo://127.0.0.1:9090","ip","monitor","multicast","multicast://224.5.6.7:1234?unicast=false,否则发给消费者的单播消息可能被提供者抢占,两个消费者在同一台机器也一样,只有","proivder,demo","provid","redi","redis://127.0.0.1:6379,如果换成","registri","registry,值改为","simpl","unicast=false:即:","zookeep","zookeeper://127.0.0.1:2181,同理,如果换成","↩","三者安装目录下的","之间的任意地址","你也可以增加运行","你也可以将","你也可以运行多个","你可以只运行","到","可以直接启动多个实例,而多个","后,修改","和","因有端口冲突,可在不同机器上运行,或者修改","地址不能配成","地址,必须是","安装手册","安装目录下","推荐使用","段广播地址,也就是:224.0.0.0","注册中心","注册中心广播互相发现,建议在不同机器上运行,如果在同一机器上,需设置","注册中心广播发现","注册中心换成","注册中心有此问题。","注册中心,安装","注意:multicast","的值。","的值改为","监控中心,它缺省配置为通过","配置中的"],"install/provider-demo.html":["1.1","cd","clone","demo","djava.net.preferipv4stack=tru","dubbo","dubbo.git","git","https://github.com/apache/incub","idea","incub","info.spring/dubbo","provider.xml","provider中的com.alibaba.dubbo.demo.provider.provid","resource/meta","修改其中的dubbo:registery,替换成真实的注册中心地址,推荐使用zookeep","如果使用intellij","安装:","示例提供者安装","请加上","运行","配置:"],"install/consumer-demo.html":["1.2","cd","clone","consumer.xml","consumer中的com.alibaba.dubbo.demo.consumer.consum","demo","djava.net.preferipv4stack=tru","dubbo","dubbo.git","git","https://github.com/apache/incub","idea","incub","info.spring/dubbo","resource/meta","修改其中的dubbo:registery,替换成provider提供的注册中心地址","如果使用intellij","安装:","示例消费者安装","请加上","请确保先启动provid","运行","配置:"],"install/zookeeper.html":["./bin/zkserver.sh","1","1.","1.3","127.0.0.1","1,第二台的内容为","2.","2.3.3","2181","2,内容如下:","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","4","4.","5.","5:","apach","cd","clientport=2181","conf/zoo.cfg","conf/zoo_sample.cfg","cp","data","datadir","datadir=/home/dubbo/zookeep","dubbo","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dump","echo","hadoop","http://archive.apache.org/dist/zookeeper/zookeep","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","id,对应上面","initlimit=10","mkdir","myid","nc","server","server.","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","start","stop","synclimit=5","tar","telnet","ticktime=2000","vi","wget","zoo.cfg","zookeep","zookeeper是","zxvf","|","↩","上面","下放置","中","中的","以上版本的","停止:","其中","后的数字,第一台的内容为","启动:","命令行","地址需改成你真实部署机器的信息","如果不需要集群,zoo.cfg","如果需要集群,zoo.cfg","安装:","客户端时完成。","并在","建议使用","或者:","指明自己的","文件:","服务器即可,所有注册中心逻辑适配都在调用","服务器端做任何侵入修改,只需安装原生的","未对","注册中心安装","注册中心客户端。","用法:","的内容如下","的子项目,强度相对较好,建议生产环境使用该注册中心","目录","目录和","目录需改成你真实输出目录","配置:"],"install/redis.html":["&","./src/redi","/dubbo/com.foo.barservice/provid","1","1.","1.4","127.0.0.1","2","2.","2.1.0","2.4.8","2.4.8.tar.gz","3.","3:","6379","archiv","cd","cli","code","conf/dubbo.properti","consum","downloads/v2/code.google.com/redis/redi","dubbo.registry.addrss","hgetal","http://redis.io/command","https://storage.googleapis.com/googl","killal","kv","make","nohup","provid","redi","redis.conf","redis://127.0.0.1:6379","server","tar","telnet","vi","wget","xzf","↩","中的","以上版本支持","使用方式参见:","停止:","即可使用。","参见:","只需搭一个原生的","启动:","命令行","和","存储服务器,参见:http://redis.io/topics/quickstart","安装:","或者:","是一个高效的","服务器,并将快速启动中","注册中心参考手册。","注册中心安装","注册中心集群","的值改为","配置:","采用在客户端同时写入多个服务器,读取单个服务器的策略实现。","里的"],"install/simple-registry-center.html":["&&","./assembly.bin/dump.sh","./assembly.bin/restart.sh","./assembly.bin/server.sh","./assembly.bin/start.sh","./assembly.bin/stop.sh","1","1.","1.5","127.0.0.1","1:","2.0.0","9090","assembly.tar.gz","cd","clone","conf/dubbo.properti","debug","dubbo","dump","echo","f","git","help","https://github.com/apache/incub","incub","logs/stdout.log","mvn","nc","op","packag","registri","restart","simpl","simple/target","start","statu","stop","tail","tar","telnet","vi","xvf","|","↩","停止:","启动:","命令参考手册","命令行","安装:","总控入口:","或者:","标准输出:","没有经过严格测试,可能不健状,并且不支持集群,不建议用于生产环境。","注册中心安装","系统状态:","请参考","调试:","配置:","重启:"],"install/simple-monitor-center.html":["&&","./assembly.bin/dump.sh","./assembly.bin/restart.sh","./assembly.bin/server.sh","./assembly.bin/start.sh","./assembly.bin/stop.sh","1","1.","1.6","127.0.0.1","1:","2.0.0","7070","assembly.tar.gz","cd","chart","clone","conf/dubbo.properti","consum","debug","dubbo","dump","echo","f","git","help","http://127.0.0.1:8080","https://github.com/apache/incub","incub","jetty.directori","logs/stdout.log","monitor","mvn","nc","op","packag","provid","restart","simpl","simple/target","start","statu","stop","tail","tar","telnet","vi","xvf","|","↩","下,否则页面上访问不了。","之间的调用,所以用于生产环境不会有风险。","停止:","启动:","命令参考手册","命令行","和","安装:","安装步骤","总控入口:","或者:","挂掉不会影响到","标准输出:","注意事项","监控中心安装","目录必须放在","系统状态:","访问:","请参考","调试:","配置:","采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。","重启:"],"install/admin-console.html":["./bin/shutdown.sh","./bin/startup.sh","/var/tmp/dubbo","1.","1.7","1:","2.","2.0.0.war","2:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","admin","admin/target/dubbo","apach","cd","clean","clone","d","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.properti","dubbo.registry.address=zookeeper://127.0.0.1:2181","git","guest","guest,","http://127.0.0.1:8080/","https://archive.apache.org/dist/tomcat/tomcat","https://github.com/dubbo/dubbo","inf/dubbo.properti","mvn","op","ops.git","ops/dubbo","packag","popd","pushd","rf","rm","root","root,","tar","tomcat","unzip","vi","webapps/root","webapps/root/web","wget","zxvf","↩","停止:","启动:","安装:","密码:","或将","或者","放在当前用户目录下","用户:","管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。","管理控制台安装","访问","配置"],"ops/introduction.html":["2","运维手册"],"ops/dubbo-ops.html":["2.1","dubbo","动态配置","当你需要管理","搜索页面","服务应用页面","服务提供者页面","服务注册","服务消费者页面","服务负责人","服务降级","权重调节","添加动态配置页面","添加路由规则页面","的服务时,首先要搜索到这个服务,然后打开它的管理页面","管理控制台运维","访问控制","负载均衡","路由规则"]},"length":11},"tokenStore":{"root":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612}},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"能":{"docs":{},"配":{"docs":{},"成":{"docs":{},"机":{"docs":{},"器":{"docs":{},"的":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":5.012658227848101},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}},".":{"1":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":5}}},"2":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":5}}},"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":3.333333333333333}}},"4":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":3.333333333333333}}},"5":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":3.333333333333333}}},"6":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":3.333333333333333}}},"7":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":5}}},"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},",":{"docs":{},"第":{"docs":{},"二":{"docs":{},"台":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}},"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}},"3":{"9":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{},".":{"2":{"5":{"5":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"ops/introduction.html":{"ref":"ops/introduction.html","tf":5}},".":{"0":{"docs":{},".":{"0":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}},"docs":{}}},"1":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":5}},".":{"0":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}},"docs":{}}},"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}}},"4":{"docs":{},".":{"8":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02564102564102564}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}},"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}},"4":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"5":{"docs":{},".":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}},"docs":{}},"docs":{}},"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"/":{"docs":{},"v":{"6":{"docs":{},".":{"0":{"docs":{},".":{"3":{"5":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}}},"7":{"0":{"7":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612}}},"docs":{}},"docs":{}},"docs":{}},"9":{"0":{"9":{"0":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.3333333333333333},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.08695652173913043},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.08333333333333333},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.060240963855421686},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.05102040816326531},"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}},"=":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},"?":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"g":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"=":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"9":{"0":{"9":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"m":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.08860759493670886},"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.08695652173913043},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.08333333333333333}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"v":{"4":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.032}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},"=":{"docs":{},"/":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"s":{"docs":{},"/":{"docs":{},"v":{"2":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":10}}}}}}}}},"c":{"docs":{},"u":{"docs":{},"b":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"f":{"docs":{},"o":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}}}}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"1":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}}}}}}}}}},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"d":{"docs":{},"e":{"docs":{},"a":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}},",":{"docs":{},"对":{"docs":{},"应":{"docs":{},"上":{"docs":{},"面":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}},"、":{"docs":{},"管":{"docs":{},"理":{"docs":{},"控":{"docs":{},"制":{"docs":{},"台":{"docs":{},"的":{"docs":{},"安":{"docs":{},"装":{"docs":{},"和":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.3333333333333333}}}}}}}}}}}}}}},"广":{"docs":{},"播":{"docs":{},"互":{"docs":{},"相":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"在":{"docs":{},"不":{"docs":{},"同":{"docs":{},"机":{"docs":{},"器":{"docs":{},"上":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"在":{"docs":{},"同":{"docs":{},"一":{"docs":{},"机":{"docs":{},"器":{"docs":{},"上":{"docs":{},",":{"docs":{},"需":{"docs":{},"设":{"docs":{},"置":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"现":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"换":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}},"有":{"docs":{},"此":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}},",":{"docs":{},"安":{"docs":{},"装":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}},"安":{"docs":{},"装":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":3.341333333333333},"install/redis.html":{"ref":"install/redis.html","tf":3.346153846153846},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":3.3453815261044175}}}},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"。":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}},"参":{"docs":{},"考":{"docs":{},"手":{"docs":{},"册":{"docs":{},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}},"集":{"docs":{},"群":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}},"意":{"docs":{},":":{"docs":{},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"事":{"docs":{},"项":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}},"这":{"docs":{},"篇":{"docs":{},"文":{"docs":{},"档":{"docs":{},"详":{"docs":{},"细":{"docs":{},"讲":{"docs":{},"解":{"docs":{},"了":{"docs":{"./":{"ref":"./","tf":0.3333333333333333}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"将":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}},"_":{"docs":{},"s":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"s":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}},"它":{"docs":{},"们":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"配":{"docs":{},"置":{"docs":{},"为":{"docs":{},"通":{"docs":{},"过":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}},"并":{"docs":{},"展":{"docs":{},"示":{"docs":{},"出":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"它":{"docs":{},"们":{"docs":{},"之":{"docs":{},"间":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},"和":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"验":{"docs":{},"证":{"docs":{},"软":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}},"中":{"docs":{},"的":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.03614457831325301},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.030612244897959183},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},"l":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"2":{"1":{"8":{"1":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.02531645569620253},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.05102040816326531}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.05063291139240506}},":":{"docs":{},"/":{"docs":{},"/":{"2":{"2":{"4":{"docs":{},".":{"5":{"docs":{},".":{"6":{"docs":{},".":{"7":{"docs":{},":":{"1":{"2":{"3":{"4":{"docs":{},"?":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"发":{"docs":{},"给":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"的":{"docs":{},"单":{"docs":{},"播":{"docs":{},"消":{"docs":{},"息":{"docs":{},"可":{"docs":{},"能":{"docs":{},"被":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"抢":{"docs":{},"占":{"docs":{},",":{"docs":{},"两":{"docs":{},"个":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"在":{"docs":{},"同":{"docs":{},"一":{"docs":{},"台":{"docs":{},"机":{"docs":{},"器":{"docs":{},"也":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}},"k":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}},"y":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.024}}}}},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}},"v":{"docs":{},"n":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"i":{"docs":{},"v":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.06329113924050633},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216}}}}}},"中":{"docs":{},"的":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}},"o":{"docs":{},"p":{"docs":{},"d":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}},"u":{"docs":{},"s":{"docs":{},"h":{"docs":{},"d":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/redis.html":{"ref":"install/redis.html","tf":3.4487179487179485}},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"6":{"3":{"7":{"9":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"换":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02564102564102564}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.04819277108433735}}},"y":{"docs":{},",":{"docs":{},"值":{"docs":{},"改":{"docs":{},"为":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.02531645569620253}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}},"f":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},"m":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}},"s":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.02531645569620253},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":3.3815261044176705},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":3.3843537414965983}},"e":{"docs":{},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.02564102564102564}},".":{"1":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"1":{"docs":{},":":{"2":{"5":{"5":{"5":{"docs":{},":":{"3":{"5":{"5":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}},"t":{"docs":{},"u":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"o":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"=":{"5":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},":":{"docs":{},"即":{"docs":{},":":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}},"z":{"docs":{},"i":{"docs":{},"p":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.0379746835443038},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":3.389333333333333}},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"2":{"1":{"8":{"1":{"docs":{},",":{"docs":{},"同":{"docs":{},"理":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"换":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}},"是":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}},"x":{"docs":{},"v":{"docs":{},"f":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}},"↩":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.04},"install/redis.html":{"ref":"install/redis.html","tf":0.038461538461538464},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}}},"三":{"docs":{},"者":{"docs":{},"安":{"docs":{},"装":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"的":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"任":{"docs":{},"意":{"docs":{},"地":{"docs":{},"址":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"用":{"docs":{},"于":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"不":{"docs":{},"会":{"docs":{},"有":{"docs":{},"风":{"docs":{},"险":{"docs":{},"。":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"增":{"docs":{},"加":{"docs":{},"运":{"docs":{},"行":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"将":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"运":{"docs":{},"行":{"docs":{},"多":{"docs":{},"个":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"只":{"docs":{},"运":{"docs":{},"行":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}},"到":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"启":{"docs":{},"动":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"而":{"docs":{},"多":{"docs":{},"个":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}},"后":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}},"的":{"docs":{},"数":{"docs":{},"字":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"台":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}},"和":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.0379746835443038},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}},"因":{"docs":{},"有":{"docs":{},"端":{"docs":{},"口":{"docs":{},"冲":{"docs":{},"突":{"docs":{},",":{"docs":{},"可":{"docs":{},"在":{"docs":{},"不":{"docs":{},"同":{"docs":{},"机":{"docs":{},"器":{"docs":{},"上":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"修":{"docs":{},"改":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"址":{"docs":{},"不":{"docs":{},"能":{"docs":{},"配":{"docs":{},"成":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"需":{"docs":{},"改":{"docs":{},"成":{"docs":{},"你":{"docs":{},"真":{"docs":{},"实":{"docs":{},"部":{"docs":{},"署":{"docs":{},"机":{"docs":{},"器":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{},"手":{"docs":{},"册":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":5.012658227848101}}}},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},"步":{"docs":{},"骤":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}},"段":{"docs":{},"广":{"docs":{},"播":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},":":{"2":{"2":{"4":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}},"改":{"docs":{},"为":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}},"内":{"docs":{},"容":{"docs":{},"如":{"docs":{},"下":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}},"子":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"强":{"docs":{},"度":{"docs":{},"相":{"docs":{},"对":{"docs":{},"较":{"docs":{},"好":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"使":{"docs":{},"用":{"docs":{},"该":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"时":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"要":{"docs":{},"搜":{"docs":{},"索":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"打":{"docs":{},"开":{"docs":{},"它":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}}}}}}}}}}}}}}}}}}}}}},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"它":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"配":{"docs":{},"置":{"docs":{},"为":{"docs":{},"通":{"docs":{},"过":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":3.343537414965986}}}}}}}},"配":{"docs":{},"置":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},"中":{"docs":{},"的":{"docs":{"install/introduction.html":{"ref":"install/introduction.html","tf":0.012658227848101266}}}},":":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216}}},":":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664},"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},",":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"b":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"g":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{},":":{"8":{"0":{"8":{"0":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}},"/":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"3":{"docs":{},".":{"3":{"docs":{},".":{"3":{"docs":{},"/":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"o":{"docs":{},"o":{"docs":{},"p":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02564102564102564}}}}}}},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}},"修":{"docs":{},"改":{"docs":{},"其":{"docs":{},"中":{"docs":{},"的":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{},"替":{"docs":{},"换":{"docs":{},"成":{"docs":{},"真":{"docs":{},"实":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"使":{"docs":{},"用":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"j":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}}}}}}}},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"z":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"安":{"docs":{},"装":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":5.043478260869565}}}}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"安":{"docs":{},"装":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":5.041666666666667}}}}}}}}},"请":{"docs":{},"加":{"docs":{},"上":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}},"确":{"docs":{},"保":{"docs":{},"先":{"docs":{},"启":{"docs":{},"动":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}}}}}}}}}}}},"参":{"docs":{},"考":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"运":{"docs":{},"行":{"docs":{"install/provider-demo.html":{"ref":"install/provider-demo.html","tf":0.043478260869565216},"install/consumer-demo.html":{"ref":"install/consumer-demo.html","tf":0.041666666666666664}}},"维":{"docs":{},"手":{"docs":{},"册":{"docs":{"ops/introduction.html":{"ref":"ops/introduction.html","tf":6}}}}}},".":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"z":{"docs":{},"k":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}}}}}}}}}}},"s":{"docs":{},"h":{"docs":{},"u":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02564102564102564}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.060240963855421686},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.05102040816326531}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612}}}}}}}},"o":{"docs":{},"p":{"docs":{},".":{"docs":{},"s":{"docs":{},"h":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}}}}}},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"v":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"g":{"docs":{},"z":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}}}},"d":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}},"n":{"docs":{},"c":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}},"o":{"docs":{},"h":{"docs":{},"u":{"docs":{},"p":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}},"i":{"docs":{},"l":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612}}}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"2":{"0":{"0":{"0":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0410958904109589}}}}}}}},"v":{"docs":{},"i":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}},"w":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}},"e":{"docs":{},"b":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"s":{"docs":{},"/":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}},"|":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}},"上":{"docs":{},"面":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"下":{"docs":{},"放":{"docs":{},"置":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"页":{"docs":{},"面":{"docs":{},"上":{"docs":{},"访":{"docs":{},"问":{"docs":{},"不":{"docs":{},"了":{"docs":{},"。":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}},"中":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}},"以":{"docs":{},"上":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"支":{"docs":{},"持":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}},"停":{"docs":{},"止":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}},"其":{"docs":{},"中":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016}}}},"启":{"docs":{},"动":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008},"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}},"参":{"docs":{},"考":{"docs":{},"手":{"docs":{},"册":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"时":{"docs":{},"完":{"docs":{},"成":{"docs":{},"。":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}},"并":{"docs":{},"在":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}},"或":{"docs":{},"者":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.016},"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}},"将":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}},"指":{"docs":{},"明":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}},"文":{"docs":{},"件":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"即":{"docs":{},"可":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"适":{"docs":{},"配":{"docs":{},"都":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}}},"端":{"docs":{},"做":{"docs":{},"任":{"docs":{},"何":{"docs":{},"侵":{"docs":{},"入":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"安":{"docs":{},"装":{"docs":{},"原":{"docs":{},"生":{"docs":{},"的":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"将":{"docs":{},"快":{"docs":{},"速":{"docs":{},"启":{"docs":{},"动":{"docs":{},"中":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}}},"应":{"docs":{},"用":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}},"注":{"docs":{},"册":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}},"负":{"docs":{},"责":{"docs":{},"人":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}},"降":{"docs":{},"级":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"未":{"docs":{},"对":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"用":{"docs":{},"法":{"docs":{},":":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}},"户":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}}}}},"目":{"docs":{},"录":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}},"和":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}},"需":{"docs":{},"改":{"docs":{},"成":{"docs":{},"你":{"docs":{},"真":{"docs":{},"实":{"docs":{},"输":{"docs":{},"出":{"docs":{},"目":{"docs":{},"录":{"docs":{"install/zookeeper.html":{"ref":"install/zookeeper.html","tf":0.008}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"放":{"docs":{},"在":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}},"&":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}},"&":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.02564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"/":{"docs":{},"t":{"docs":{},"m":{"docs":{},"p":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0410958904109589}}}}}}}}}}}}}}}},"k":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"a":{"docs":{},"l":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}},"v":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}},"x":{"docs":{},"z":{"docs":{},"f":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}},"v":{"docs":{},"f":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}},"参":{"docs":{},"见":{"docs":{},":":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}},"只":{"docs":{},"需":{"docs":{},"搭":{"docs":{},"一":{"docs":{},"个":{"docs":{},"原":{"docs":{},"生":{"docs":{},"的":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}},"存":{"docs":{},"储":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},",":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},"/":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}},"采":{"docs":{},"用":{"docs":{},"在":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"同":{"docs":{},"时":{"docs":{},"写":{"docs":{},"入":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},",":{"docs":{},"读":{"docs":{},"取":{"docs":{},"单":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"的":{"docs":{},"策":{"docs":{},"略":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"磁":{"docs":{},"盘":{"docs":{},"存":{"docs":{},"储":{"docs":{},"统":{"docs":{},"计":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},"安":{"docs":{},"装":{"docs":{},"机":{"docs":{},"器":{"docs":{},"的":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"限":{"docs":{},"制":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"用":{"docs":{},"m":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"共":{"docs":{},"享":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"。":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"里":{"docs":{},"的":{"docs":{"install/redis.html":{"ref":"install/redis.html","tf":0.01282051282051282}}}},"f":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.024096385542168676},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.02040816326530612},"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}},"总":{"docs":{},"控":{"docs":{},"入":{"docs":{},"口":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}},"没":{"docs":{},"有":{"docs":{},"经":{"docs":{},"过":{"docs":{},"严":{"docs":{},"格":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"健":{"docs":{},"状":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"不":{"docs":{},"建":{"docs":{},"议":{"docs":{},"用":{"docs":{},"于":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"。":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"系":{"docs":{},"统":{"docs":{},"状":{"docs":{},"态":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}},"调":{"docs":{},"试":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"重":{"docs":{},"启":{"docs":{},":":{"docs":{"install/simple-registry-center.html":{"ref":"install/simple-registry-center.html","tf":0.012048192771084338},"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}},"挂":{"docs":{},"掉":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{},"到":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}}}}}}}},"访":{"docs":{},"问":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}},":":{"docs":{"install/simple-monitor-center.html":{"ref":"install/simple-monitor-center.html","tf":0.01020408163265306}}},"控":{"docs":{},"制":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"密":{"docs":{},"码":{"docs":{},":":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0273972602739726}}}}},"放":{"docs":{},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{},"用":{"docs":{},"户":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}},"管":{"docs":{},"理":{"docs":{},"控":{"docs":{},"制":{"docs":{},"台":{"docs":{},"为":{"docs":{},"内":{"docs":{},"部":{"docs":{},"裁":{"docs":{},"剪":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"开":{"docs":{},"源":{"docs":{},"部":{"docs":{},"分":{"docs":{},"主":{"docs":{},"要":{"docs":{},"包":{"docs":{},"含":{"docs":{},":":{"docs":{},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"动":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"降":{"docs":{},"级":{"docs":{},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},",":{"docs":{},"权":{"docs":{},"重":{"docs":{},"调":{"docs":{},"整":{"docs":{},",":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{},"等":{"docs":{},"管":{"docs":{},"理":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":0.0136986301369863}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{"install/admin-console.html":{"ref":"install/admin-console.html","tf":5.013698630136986}}}},"运":{"docs":{},"维":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":5.055555555555555}}}}}}}}},"动":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"当":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"管":{"docs":{},"理":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}},"搜":{"docs":{},"索":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"权":{"docs":{},"重":{"docs":{},"调":{"docs":{},"节":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"添":{"docs":{},"加":{"docs":{},"动":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{},"页":{"docs":{},"面":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}}}}},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{"ops/dubbo-ops.html":{"ref":"ops/dubbo-ops.html","tf":0.05555555555555555}}}}}}},"length":479},"corpusTokens":["&","&&","./assembly.bin/dump.sh","./assembly.bin/restart.sh","./assembly.bin/server.sh","./assembly.bin/start.sh","./assembly.bin/stop.sh","./bin/shutdown.sh","./bin/startup.sh","./bin/zkserver.sh","./src/redi","/dubbo/com.foo.barservice/provid","/var/tmp/dubbo","1","1.","1.1","1.2","1.3","1.4","1.5","1.6","1.7","127.0.0.1","127.0.0.1,也不能配成机器的","1:","1,第二台的内容为","2","2.","2.0.0","2.0.0.war","2.1","2.1.0","2.3.3","2.4.8","2.4.8.tar.gz","2181","239.255.255.255","2:","2,内容如下:","2:","3.","3.3.3","3.3.3.tar.gz","3.3.3/data","3.3.3/zookeep","3:","3:","4","4.","5.","5:","6.0.35","6.0.35.tar.gz","6/v6.0.35/bin/apach","6379","7070","9090","admin","admin/target/dubbo","apach","archiv","assembly.tar.gz","cd","chart","clean","cli","clientport=2181","clone","code","conf/dubbo.properti","conf/dubbo.properties,将","conf/zoo.cfg","conf/zoo_sample.cfg","consum","consumer.xml","consumer中的com.alibaba.dubbo.demo.consumer.consum","consumer,simpl","consumer,它们缺省配置为通过","consumer,并展示出它们的依赖关系,以及它们之间调用的次数和时间。","consumer,来验证软负载均衡,demo","cp","d","data","datadir","datadir=/home/dubbo/zookeep","debug","demo","djava.net.preferipv4stack=tru","downloads/v2/code.google.com/redis/redi","dubbo","dubbo.admin.guest.password=guest","dubbo.admin.root.password=root","dubbo.git","dubbo.properti","dubbo.protocol.port","dubbo.registry.address","dubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181","dubbo.registry.address=zookeeper://127.0.0.1:2181","dubbo.registry.addrss","dubbo://127.0.0.1:9090","dump","echo","f","git","guest","guest,","hadoop","help","hgetal","http://127.0.0.1:8080","http://127.0.0.1:8080/","http://archive.apache.org/dist/zookeeper/zookeep","http://redis.io/command","http://zookeeper.apache.org/doc/r3.3.3/zookeeperadmin.html","https://archive.apache.org/dist/tomcat/tomcat","https://github.com/apache/incub","https://github.com/dubbo/dubbo","https://storage.googleapis.com/googl","idea","id,对应上面","incub","inf/dubbo.properti","info.spring/dubbo","initlimit=10","introduct","ip","jetty.directori","killal","kv","logs/stdout.log","make","mkdir","monitor","multicast","multicast://224.5.6.7:1234?unicast=false,否则发给消费者的单播消息可能被提供者抢占,两个消费者在同一台机器也一样,只有","mvn","myid","nc","nohup","op","ops.git","ops/dubbo","packag","popd","proivder,demo","provid","provider.xml","provider中的com.alibaba.dubbo.demo.provider.provid","pushd","redi","redis.conf","redis://127.0.0.1:6379","redis://127.0.0.1:6379,如果换成","registri","registry,值改为","resource/meta","restart","rf","rm","root","root,","server","server.","server.1=10.20.153.10:2555:3555","server.2=10.20.153.11:2555:3555","simpl","simple/target","start","statu","stop","synclimit=5","tail","tar","telnet","ticktime=2000","tomcat","unicast=false:即:","unzip","vi","webapps/root","webapps/root/web","wget","xvf","xzf","zoo.cfg","zookeep","zookeeper://127.0.0.1:2181,同理,如果换成","zookeeper是","zxvf","|","↩","三者安装目录下的","上面","下放置","下,否则页面上访问不了。","中","中的","之间的任意地址","之间的调用,所以用于生产环境不会有风险。","以上版本支持","以上版本的","你也可以增加运行","你也可以将","你也可以运行多个","你可以只运行","使用方式参见:","修改其中的dubbo:registery,替换成provider提供的注册中心地址","修改其中的dubbo:registery,替换成真实的注册中心地址,推荐使用zookeep","停止:","其中","到","动态配置","即可使用。","参见:","只需搭一个原生的","可以直接启动多个实例,而多个","后的数字,第一台的内容为","后,修改","启动:","命令参考手册","命令行","和","因有端口冲突,可在不同机器上运行,或者修改","地址不能配成","地址需改成你真实部署机器的信息","地址,必须是","如果不需要集群,zoo.cfg","如果使用intellij","如果需要集群,zoo.cfg","存储服务器,参见:http://redis.io/topics/quickstart","安装:","安装手册","安装步骤","安装目录下","安装:","客户端时完成。","密码:","并在","建议使用","当你需要管理","总控入口:","或将","或者","或者:","或者:","挂掉不会影响到","指明自己的","推荐使用","搜索页面","放在当前用户目录下","文件:","是一个高效的","服务器即可,所有注册中心逻辑适配都在调用","服务器端做任何侵入修改,只需安装原生的","服务器,并将快速启动中","服务应用页面","服务提供者页面","服务注册","服务消费者页面","服务负责人","服务降级","未对","权重调节","标准输出:","段广播地址,也就是:224.0.0.0","没有经过严格测试,可能不健状,并且不支持集群,不建议用于生产环境。","注册中心","注册中心、管理控制台的安装和使用。","注册中心参考手册。","注册中心安装","注册中心客户端。","注册中心广播互相发现,建议在不同机器上运行,如果在同一机器上,需设置","注册中心广播发现","注册中心换成","注册中心有此问题。","注册中心集群","注册中心,安装","注意事项","注意:multicast","添加动态配置页面","添加路由规则页面","用户:","用法:","的值。","的值改为","的内容如下","的子项目,强度相对较好,建议生产环境使用该注册中心","的服务时,首先要搜索到这个服务,然后打开它的管理页面","监控中心安装","监控中心,它缺省配置为通过","目录","目录和","目录必须放在","目录需改成你真实输出目录","示例提供者安装","示例消费者安装","管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。","管理控制台安装","管理控制台运维","系统状态:","访问","访问:","访问控制","请加上","请参考","请确保先启动provid","调试:","负载均衡","路由规则","运维手册","运行","这篇文档详细讲解了","配置","配置:","配置中的","配置:","采用在客户端同时写入多个服务器,读取单个服务器的策略实现。","采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。","里的","重启:"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"这篇文档详细讲解了 dubbo 注册中心、管理控制台的安装和使用。\n"},"install/introduction.html":{"url":"install/introduction.html","title":"1 安装手册","keywords":"","body":"安装手册\n你可以只运行 Demo Provider 和 Demo Consumer,它们缺省配置为通过 Multicast  1 注册中心广播互相发现,建议在不同机器上运行,如果在同一机器上,需设置 unicast=false:即: multicast://224.5.6.7:1234?unicast=false,否则发给消费者的单播消息可能被提供者抢占,两个消费者在同一台机器也一样,只有 multicast 注册中心有此问题。\n你也可以运行多个 Demo Provider 和 Demo Consumer,来验证软负载均衡,Demo Consumer 可以直接启动多个实例,而多个 Demo Provider 因有端口冲突,可在不同机器上运行,或者修改 Demo Provider 安装目录下 conf/dubbo.properties 配置中的 dubbo.protocol.port 的值。\n你也可以增加运行 Simple Monitor 监控中心,它缺省配置为通过 Multicast 注册中心广播发现 Provider 和 Consumer,并展示出它们的依赖关系,以及它们之间调用的次数和时间。\n你也可以将 Multicast 注册中心换成 Zookeeper 注册中心,安装 Zookeeper Registry 后,修改 Demo Proivder,Demo Consumer,Simple Monitor 三者安装目录下的 conf/dubbo.properties,将 dubbo.registry.address 的值改为 zookeeper://127.0.0.1:2181,同理,如果换成 Redis Registry,值改为 redis://127.0.0.1:6379,如果换成 Simple Registry,值改为 dubbo://127.0.0.1:9090\n推荐使用 Zookeeper 注册中心\n\n1. 注意:multicast 地址不能配成 127.0.0.1,也不能配成机器的 IP 地址,必须是 D 段广播地址,也就是:224.0.0.0 到 239.255.255.255 之间的任意地址 ↩\n\n"},"install/provider-demo.html":{"url":"install/provider-demo.html","title":"1.1 示例提供者安装","keywords":"","body":"示例提供者安装\n安装:\ngit clone https://github.com/apache/incubator-dubbo.git\ncd incubator-dubbo\n运行 dubbo-demo-provider中的com.alibaba.dubbo.demo.provider.Provider\n如果使用Intellij Idea 请加上-Djava.net.preferIPv4Stack=true\n\n配置:\nresource/META-INFO.spring/dubbo-demo-provider.xml\n修改其中的dubbo:registery,替换成真实的注册中心地址,推荐使用zookeeper\n\n"},"install/consumer-demo.html":{"url":"install/consumer-demo.html","title":"1.2 示例消费者安装","keywords":"","body":"示例消费者安装\n安装:\ngit clone https://github.com/apache/incubator-dubbo.git\ncd incubator-dubbo\n运行 dubbo-demo-consumer中的com.alibaba.dubbo.demo.consumer.Consumer\n请确保先启动Provider\n如果使用Intellij Idea 请加上-Djava.net.preferIPv4Stack=true\n\n配置:\nresource/META-INFO.spring/dubbo-demo-consumer.xml\n修改其中的dubbo:registery,替换成Provider提供的注册中心地址\n\n"},"install/zookeeper.html":{"url":"install/zookeeper.html","title":"1.3 Zookeeper 注册中心安装","keywords":"","body":"Zookeeper 注册中心安装\n建议使用 dubbo-2.3.3 以上版本的 zookeeper 1 注册中心客户端。\nDubbo 未对 Zookeeper 服务器端做任何侵入修改,只需安装原生的 Zookeeper 服务器即可,所有注册中心逻辑适配都在调用 Zookeeper 客户端时完成。\n安装:\nwget http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz\ntar zxvf zookeeper-3.3.3.tar.gz\ncd zookeeper-3.3.3\ncp conf/zoo_sample.cfg conf/zoo.cfg\n\n配置:\nvi conf/zoo.cfg\n\n如果不需要集群,zoo.cfg 的内容如下 2:\ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\n\n如果需要集群,zoo.cfg 的内容如下 3:\ntickTime=2000\ninitLimit=10\nsyncLimit=5\ndataDir=/home/dubbo/zookeeper-3.3.3/data\nclientPort=2181\nserver.1=10.20.153.10:2555:3555\nserver.2=10.20.153.11:2555:3555\n\n并在 data 目录 4 下放置 myid 文件:\nmkdir data\nvi myid\n\nmyid 指明自己的 id,对应上面 zoo.cfg 中 server. 后的数字,第一台的内容为 1,第二台的内容为 2,内容如下:\n1\n启动:\n./bin/zkServer.sh start\n\n停止:\n./bin/zkServer.sh stop\n\n命令行 5: \ntelnet 127.0.0.1 2181\ndump\n\n或者:\necho dump | nc 127.0.0.1 2181\n\n用法:\ndubbo.registry.address=zookeeper://10.20.153.10:2181?backup=10.20.153.11:2181\n\n或者:\n\n\n\n1. Zookeeper是 Apache Hadoop 的子项目,强度相对较好,建议生产环境使用该注册中心 ↩\n\n\n2. 其中 data 目录需改成你真实输出目录 ↩\n\n\n3. 其中 data 目录和 server 地址需改成你真实部署机器的信息 ↩\n\n\n4. 上面 zoo.cfg 中的 dataDir ↩\n\n\n5. http://zookeeper.apache.org/doc/r3.3.3/zookeeperAdmin.html ↩\n\n"},"install/redis.html":{"url":"install/redis.html","title":"1.4 Redis 注册中心安装","keywords":"","body":"Redis 注册中心安装\nRedis 1 使用方式参见: Redis 注册中心参考手册。\n只需搭一个原生的 Redis 服务器,并将快速启动中 Provider 和 Consumer 里的 conf/dubbo.properties 中的 dubbo.registry.addrss 的值改为 redis://127.0.0.1:6379 即可使用。\nRedis 注册中心集群 2 采用在客户端同时写入多个服务器,读取单个服务器的策略实现。\n安装:\nwget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/redis/redis-2.4.8.tar.gz\ntar xzf redis-2.4.8.tar.gz\ncd redis-2.4.8\nmake\n\n配置:\nvi redis.conf\n\n启动:\nnohup ./src/redis-server redis.conf &\n\n停止:\nkillall redis-server\n\n\n命令行 3:\n\n./src/redis-cli\nhgetall /dubbo/com.foo.BarService/providers\n\n或者:\ntelnet 127.0.0.1 6379\nhgetall /dubbo/com.foo.BarService/providers\n\n\n1. Redis 是一个高效的 KV 存储服务器,参见:http://redis.io/topics/quickstart ↩\n\n\n2. 2.1.0 以上版本支持 ↩\n\n\n3. 参见: http://redis.io/commands ↩\n\n"},"install/simple-registry-center.html":{"url":"install/simple-registry-center.html","title":"1.5 Simple 注册中心安装","keywords":"","body":"Simple 注册中心安装\nSimple Registry 没有经过严格测试,可能不健状,并且不支持集群,不建议用于生产环境。\n安装:\ngit clone https://github.com/apache/incubator-dubbo-ops\ncd incubator-dubbo-ops && mvn package\ncd dubbo-registry-simple/target && tar xvf dubbo-registry-simple-2.0.0-assembly.tar.gz\ncd dubbo-registry-simple-2.0.0\n\n配置:\nvi conf/dubbo.properties\n\n启动:\n./assembly.bin/start.sh\n\n停止:\n./assembly.bin/stop.sh\n\n重启:\n./assembly.bin/restart.sh\n\n调试:\n./assembly.bin/start.sh debug\n\n系统状态:\n./assembly.bin/dump.sh\n\n总控入口:\n./assembly.bin/server.sh start\n./assembly.bin/server.sh stop\n./assembly.bin/server.sh restart\n./assembly.bin/server.sh debug\n./assembly.bin/server.sh dump\n\n标准输出:\ntail -f logs/stdout.log\n\n命令行 1:\ntelnet 127.0.0.1 9090\nhelp\n\n或者:\necho status | nc -i 1 127.0.0.1 9090\n\n\n1. 请参考 Telnet 命令参考手册 ↩\n\n"},"install/simple-monitor-center.html":{"url":"install/simple-monitor-center.html","title":"1.6 Simple 监控中心安装","keywords":"","body":"Simple 监控中心安装\n安装步骤\n安装:\ngit clone https://github.com/apache/incubator-dubbo-ops\ncd incubator-dubbo-ops && mvn package\ncd dubbo-monitor-simple/target && tar xvf dubbo-monitor-simple-2.0.0-assembly.tar.gz\ncd dubbo-monitor-simple-2.0.0\n\n配置:\nvi conf/dubbo.properties\n\n启动:\n./assembly.bin/start.sh\n\n停止:\n./assembly.bin/stop.sh\n\n重启:\n./assembly.bin/restart.sh\n\n调试:\n./assembly.bin/start.sh debug\n\n系统状态:\n./assembly.bin/dump.sh\n\n总控入口:\n./assembly.bin/server.sh start\n./assembly.bin/server.sh stop\n./assembly.bin/server.sh restart\n./assembly.bin/server.sh debug\n./assembly.bin/server.sh dump\n\n标准输出:\ntail -f logs/stdout.log\n\n命令行 1:\ntelnet 127.0.0.1 7070\nhelp\n\n或者:\necho status | nc -i 1 127.0.0.1 7070\n\n访问:\nhttp://127.0.0.1:8080\n\n注意事项\nSimple Monitor 挂掉不会影响到 Consumer 和 Provider 之间的调用,所以用于生产环境不会有风险。\nSimple Monitor 采用磁盘存储统计信息,请注意安装机器的磁盘限制,如果要集群,建议用mount共享磁盘。\ncharts 目录必须放在 jetty.directory 下,否则页面上访问不了。\n\n1. 请参考 Telnet 命令参考手册 ↩\n\n"},"install/admin-console.html":{"url":"install/admin-console.html","title":"1.7 管理控制台安装","keywords":"","body":"管理控制台安装\n管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。\n安装:\nwget https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.35/bin/apache-tomcat-6.0.35.tar.gz\ntar zxvf apache-tomcat-6.0.35.tar.gz\ncd apache-tomcat-6.0.35\nrm -rf webapps/ROOT\n\ngit clone https://github.com/dubbo/dubbo-ops.git /var/tmp/dubbo-ops\npushd /var/tmp/dubbo-ops\nmvn clean package\npopd\n\nunzip /var/tmp/dubbo-ops/dubbo-admin/target/dubbo-admin-2.0.0.war -d webapps/ROOT\n\n配置 1:\nvi webapps/ROOT/WEB-INF/dubbo.properties\ndubbo.properties\ndubbo.registry.address=zookeeper://127.0.0.1:2181\ndubbo.admin.root.password=root\ndubbo.admin.guest.password=guest\n\n启动:\n./bin/startup.sh\n\n停止:\n./bin/shutdown.sh\n\n访问 2:\nhttp://127.0.0.1:8080/\n\n1. 或将 dubbo.properties 放在当前用户目录下 ↩\n\n\n2. 用户: root, 密码: root 或者 用户: guest, 密码: guest ↩\n\n"},"ops/introduction.html":{"url":"ops/introduction.html","title":"2 运维手册","keywords":"","body":"运维手册\n"},"ops/dubbo-ops.html":{"url":"ops/dubbo-ops.html","title":"2.1 管理控制台运维","keywords":"","body":"管理控制台运维\n搜索页面\n当你需要管理 Dubbo 的服务时,首先要搜索到这个服务,然后打开它的管理页面\n\n服务提供者页面\n\n服务消费者页面\n\n服务应用页面\n\n添加路由规则页面\n\n添加动态配置页面\n\n服务注册\n服务降级\n路由规则\n访问控制\n动态配置\n权重调节\n负载均衡\n服务负责人\n"}}}
\ No newline at end of file
diff --git a/books/dubbo-dev-book-en/.gitignore b/books/dubbo-dev-book-en/.gitignore
new file mode 100644
index 00000000..f1743447
--- /dev/null
+++ b/books/dubbo-dev-book-en/.gitignore
@@ -0,0 +1 @@
+_book
diff --git a/books/dubbo-dev-book-en/LICENSE b/books/dubbo-dev-book-en/LICENSE
new file mode 100644
index 00000000..8dada3ed
--- /dev/null
+++ b/books/dubbo-dev-book-en/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/books/dubbo-dev-book-en/SPI.html b/books/dubbo-dev-book-en/SPI.html
index 6c5729a6..3bbf666e 100644
--- a/books/dubbo-dev-book-en/SPI.html
+++ b/books/dubbo-dev-book-en/SPI.html
@@ -57,10 +57,10 @@
     <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
 
     
-    <link rel="next" href="implementation.md" />
+    <link rel="next" href="implementation.html" />
     
     
-    <link rel="prev" href="design.md" />
+    <link rel="prev" href="design.html" />
     
 
     </head>
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="design.md">
+        <li class="chapter " data-level="1.3" data-path="design.html">
             
-                <span>
+                <a href="design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="implementation.md">
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
             
-                <span>
+                <a href="implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="contract.md">
+        <li class="chapter " data-level="1.7" data-path="contract.html">
             
-                <span>
+                <a href="contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="coding.md">
+        <li class="chapter " data-level="1.8" data-path="coding.html">
             
-                <span>
+                <a href="coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="contribution.md">
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
             
-                <span>
+                <a href="contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="checklist.md">
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
             
-                <span>
+                <a href="checklist.html">
             
                     
                     11 Checklist
@@ -842,12 +842,12 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
 
             
                 
-                <a href="design.md" class="navigation navigation-prev " aria-label="Previous page: 2 Architecture">
+                <a href="design.html" class="navigation navigation-prev " aria-label="Previous page: 2 Architecture">
                     <i class="fa fa-angle-left"></i>
                 </a>
                 
                 
-                <a href="implementation.md" class="navigation navigation-next " aria-label="Next page: 4 Init, Process, Protocols">
+                <a href="implementation.html" class="navigation navigation-next " aria-label="Next page: 4 Init, Process, Protocols">
                     <i class="fa fa-angle-right"></i>
                 </a>
                 
@@ -858,7 +858,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"3 How SPI Works","level":"1.4","depth":1,"next":{"title":"4 Init, Process, Protocols","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"previous":{"title":"2 Architecture","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"SPI.md","mtime":"2017-12-26T02:28:23.721Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"3 How SPI Works","level":"1.4","depth":1,"next":{"title":"4 Init, Process, Protocols","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"previous":{"title":"2 Architecture","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"SPI.md","mtime":"2018-03-19T06:46:50.839Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/TCK.html b/books/dubbo-dev-book-en/TCK.html
index fd456cf9..bde4e62c 100644
--- a/books/dubbo-dev-book-en/TCK.html
+++ b/books/dubbo-dev-book-en/TCK.html
@@ -113,9 +113,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="design.md">
+        <li class="chapter " data-level="1.3" data-path="design.html">
             
-                <span>
+                <a href="design.html">
             
                     
                     2 Architecture
@@ -139,9 +139,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="implementation.md">
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
             
-                <span>
+                <a href="implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -509,9 +509,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="contract.md">
+        <li class="chapter " data-level="1.7" data-path="contract.html">
             
-                <span>
+                <a href="contract.html">
             
                     
                     6 Contract
@@ -522,9 +522,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="coding.md">
+        <li class="chapter " data-level="1.8" data-path="coding.html">
             
-                <span>
+                <a href="coding.html">
             
                     
                     7 Code Style
@@ -548,9 +548,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="contribution.md">
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
             
-                <span>
+                <a href="contribution.html">
             
                     
                     10 Contribution
@@ -561,9 +561,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="checklist.md">
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
             
-                <span>
+                <a href="checklist.html">
             
                     
                     11 Checklist
@@ -698,7 +698,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"13 TCK","level":"1.13","depth":1,"previous":{"title":"12 Code Smell","level":"1.12","depth":1,"path":"code-smell.md","ref":"./code-smell.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"TCK.md","mtime":"2017-12-26T02:28:23.721Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"13 TCK","level":"1.13","depth":1,"previous":{"title":"12 Code Smell","level":"1.12","depth":1,"path":"code-smell.md","ref":"./code-smell.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"TCK.md","mtime":"2018-03-19T06:46:50.840Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/build.html b/books/dubbo-dev-book-en/build.html
index 88997737..36c11150 100644
--- a/books/dubbo-dev-book-en/build.html
+++ b/books/dubbo-dev-book-en/build.html
@@ -57,7 +57,7 @@
     <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
 
     
-    <link rel="next" href="design.md" />
+    <link rel="next" href="design.html" />
     
     
     <link rel="prev" href="./" />
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="design.md">
+        <li class="chapter " data-level="1.3" data-path="design.html">
             
-                <span>
+                <a href="design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="implementation.md">
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
             
-                <span>
+                <a href="implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="contract.md">
+        <li class="chapter " data-level="1.7" data-path="contract.html">
             
-                <span>
+                <a href="contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="coding.md">
+        <li class="chapter " data-level="1.8" data-path="coding.html">
             
-                <span>
+                <a href="coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="contribution.md">
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
             
-                <span>
+                <a href="contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="checklist.md">
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
             
-                <span>
+                <a href="checklist.html">
             
                     
                     11 Checklist
@@ -647,21 +647,21 @@ <h1>
     
                                 <section class="normal markdown-section">
                                 
-                                <h1 id="source-code-build">source code build</h1>
-<h2 id="checkout">checkout</h2>
-<p>checkout the lastest project source code via below comand:</p>
-<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/alibaba/dubbo dubbo
+                                <h1 id="source-code-build">Source Code Build</h1>
+<h2 id="checkout">Checkout</h2>
+<p>checkout the lastest project source code with commands blow:</p>
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo.git dubbo
 </code></pre>
-<h2 id="branch">branch</h2>
-<p>We apply master as the major branch for dev, and branch as the maintenance release. Tags for all versions can be checked via <a href="https://github.com/alibaba/dubbo/tags" target="_blank">https://github.com/alibaba/dubbo/tags</a>.</p>
-<h2 id="building">building</h2>
-<p>Dubbo applies <a href="http://maven.apache.org" target="_blank">maven</a> as the building tool.</p>
-<p>Demands:</p>
+<h2 id="branches">Branches</h2>
+<p>We use <code>master</code> as the major branch for new feature development, and use other branches for maintenance. Tags for all versions can be checked via <a href="https://github.com/apache/incubator-dubbo/tags" target="_blank">https://github.com/apache/incubator-dubbo/tags</a>.</p>
+<h2 id="building">Building</h2>
+<p>Dubbo relies on <a href="http://maven.apache.org" target="_blank">maven</a> as the building tool.</p>
+<p>Requirements:</p>
 <ul>
 <li>Java above 1.5 version</li>
 <li>Maven version 2.2.1 or above    </li>
 </ul>
-<p>below  <code>MAVEN_OPTS</code>should be configured before building:</p>
+<p>The following <code>MAVEN_OPTS</code>should be configured before building:</p>
 <pre><code class="lang-sh"><span class="hljs-built_in">export</span> MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=512m
 </code></pre>
 <p>build with below command:</p>
@@ -670,7 +670,7 @@ <h2 id="building">building</h2>
 <p>skip testing using below building command:</p>
 <pre><code class="lang-sh">mvn install -Dmaven.test.skip
 </code></pre>
-<h2 id="building-jar-package-of-source-code">building jar package of source code</h2>
+<h2 id="building-jar-package-of-source-code">Building jar package of source code</h2>
 <p>build Dubbo source code jar package with below command, which can debug Dubbo source code. </p>
 <pre><code class="lang-sh">mvn clean <span class="hljs-built_in">source</span>:jar install -Dmaven.test.skip
 </code></pre>
@@ -679,20 +679,16 @@ <h2 id="ide-support">IDE support</h2>
 <h3 id="intellij-idea">Intellij Idea</h3>
 <pre><code class="lang-sh">mvn idea:idea
 </code></pre>
-<h3 id="eclipse">eclipse</h3>
+<h3 id="eclipse">Eclipse</h3>
 <pre><code class="lang-sh">mvn eclipse:eclipse
 </code></pre>
-<p>importing into eclipse</p>
-<p>first, a maven repository needs to be configured in eclipse. Click Preferences -&gt; Java -&gt; Build Path -&gt; Classpath  <code>M2_REPO</code> is the environment variable poiting to local maven repository&#x3002; <sup><a href="#fn_2" id="reffn_2">2</a></sup></p>
-<p>Using below maven command as well: </p>
+<p>Importing into eclipse</p>
+<p>Firstly, a maven repository needs to be configured in eclipse. Define <code>M2_REPO</code> and point it to the local maven repository by clicking <code>Preferences -&gt; Java -&gt; Build Path -&gt; Classpath</code>.</p>
+<p>Use the following maven command as well: </p>
 <pre><code class="lang-sh">mvn eclipse:configure-workspace -Declipse.workspace=/path/to/the/workspace/
 </code></pre>
-<blockquote id="fn_1">
-<sup>1</sup>. view the source code through <a href="https://github.com/alibaba/dubbo" target="_blank">https://github.com/alibaba/dubbo</a> <a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
-</blockquote>
-<blockquote id="fn_2">
-<sup>2</sup>. path under UNIX is ${HOME}/.m2/repository, path under Windows is C:\Documents and Settings\<user>.m2\repository<a href="#reffn_2" title="Jump back to footnote [2] in the text."> &#x21A9;</a>
-</user></blockquote>
+<p>1: view the source code through <a href="https://github.com/apache/incubator-dubbo" target="_blank">https://github.com/apache/incubator-dubbo</a> 
+2: path under UNIX is ${HOME}/.m2/repository, path under Windows is C:\Documents and Settings\<user>.m2\repository</user></p>
 
                                 
                                 </section>
@@ -725,7 +721,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
                 </a>
                 
                 
-                <a href="design.md" class="navigation navigation-next " aria-label="Next page: 2 Architecture">
+                <a href="design.html" class="navigation navigation-next " aria-label="Next page: 2 Architecture">
                     <i class="fa fa-angle-right"></i>
                 </a>
                 
@@ -736,7 +732,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1 How To Build","level":"1.2","depth":1,"next":{"title":"2 Architecture","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"build.md","mtime":"2017-12-26T02:28:23.722Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1 How To Build","level":"1.2","depth":1,"next":{"title":"2 Architecture","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"build.md","mtime":"2018-04-13T06:52:30.931Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/checklist.html b/books/dubbo-dev-book-en/checklist.html
new file mode 100644
index 00000000..bbcde02a
--- /dev/null
+++ b/books/dubbo-dev-book-en/checklist.html
@@ -0,0 +1,748 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <meta charset="UTF-8">
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <title>11 Checklist · GitBook</title>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.2.3">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="code-smell.html" />
+    
+    
+    <link rel="prev" href="contribution.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="build.html">
+            
+                <a href="build.html">
+            
+                    
+                    1 How To Build
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.3" data-path="design.html">
+            
+                <a href="design.html">
+            
+                    
+                    2 Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="SPI.html">
+            
+                <a href="SPI.html">
+            
+                    
+                    3 How SPI Works
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
+            
+                <a href="implementation.html">
+            
+                    
+                    4 Init, Process, Protocols
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="impls/introduction.html">
+            
+                <a href="impls/introduction.html">
+            
+                    
+                    5 SPI Extensions
+            
+                </a>
+            
+
+            
+            <ul class="articles">
+                
+    
+        <li class="chapter " data-level="1.6.1" data-path="impls/protocol.html">
+            
+                <a href="impls/protocol.html">
+            
+                    
+                    5.1 Protocol
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.2" data-path="impls/filter.html">
+            
+                <a href="impls/filter.html">
+            
+                    
+                    5.2 Filter
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.3" data-path="impls/invoker-listener.html">
+            
+                <a href="impls/invoker-listener.html">
+            
+                    
+                    5.3 InvokerListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.4" data-path="impls/exporter-listener.html">
+            
+                <a href="impls/exporter-listener.html">
+            
+                    
+                    5.4 ExporterListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.5" data-path="impls/cluster.html">
+            
+                <a href="impls/cluster.html">
+            
+                    
+                    5.5 Cluster
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.6" data-path="impls/router.html">
+            
+                <a href="impls/router.html">
+            
+                    
+                    5.6 Router
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.7" data-path="impls/load-balance.html">
+            
+                <a href="impls/load-balance.html">
+            
+                    
+                    5.7 LoadBalance
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.8" data-path="impls/merger.html">
+            
+                <a href="impls/merger.html">
+            
+                    
+                    5.8 Merger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.9" data-path="impls/registry.html">
+            
+                <a href="impls/registry.html">
+            
+                    
+                    5.9 Registry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.10" data-path="impls/monitor.html">
+            
+                <a href="impls/monitor.html">
+            
+                    
+                    5.10 Monitor
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.11" data-path="impls/extension-factory.html">
+            
+                <a href="impls/extension-factory.html">
+            
+                    
+                    5.11 ExtensionFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.12" data-path="impls/proxy-factory.html">
+            
+                <a href="impls/proxy-factory.html">
+            
+                    
+                    5.12 ProxyFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.13" data-path="impls/compiler.html">
+            
+                <a href="impls/compiler.html">
+            
+                    
+                    5.13 Compiler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.14" data-path="impls/dispatcher.html">
+            
+                <a href="impls/dispatcher.html">
+            
+                    
+                    5.14 Dispatcher
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.15" data-path="impls/threadpool.html">
+            
+                <a href="impls/threadpool.html">
+            
+                    
+                    5.15 Threadpool
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.16" data-path="impls/serialize.html">
+            
+                <a href="impls/serialize.html">
+            
+                    
+                    5.16 Serialization
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.17" data-path="impls/remoting.html">
+            
+                <a href="impls/remoting.html">
+            
+                    
+                    5.17 Remoting
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.18" data-path="impls/exchanger.html">
+            
+                <a href="impls/exchanger.html">
+            
+                    
+                    5.18 Exchanger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.19" data-path="impls/networker.html">
+            
+                <a href="impls/networker.html">
+            
+                    
+                    5.19 Networker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.20" data-path="impls/telnet-handler.html">
+            
+                <a href="impls/telnet-handler.html">
+            
+                    
+                    5.20 TelnetHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.21" data-path="impls/status-checker.html">
+            
+                <a href="impls/status-checker.html">
+            
+                    
+                    5.21 StatusChecker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.22" data-path="impls/container.html">
+            
+                <a href="impls/container.html">
+            
+                    
+                    5.22 Container
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.23" data-path="impls/page.html">
+            
+                <a href="impls/page.html">
+            
+                    
+                    5.23 PageHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.24" data-path="impls/cache.html">
+            
+                <a href="impls/cache.html">
+            
+                    
+                    5.24 Cache
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.25" data-path="impls/validation.html">
+            
+                <a href="impls/validation.html">
+            
+                    
+                    5.25 Validation
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.26" data-path="impls/logger-adapter.html">
+            
+                <a href="impls/logger-adapter.html">
+            
+                    
+                    5.26 LoggerAdapter
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+            </ul>
+            
+        </li>
+    
+        <li class="chapter " data-level="1.7" data-path="contract.html">
+            
+                <a href="contract.html">
+            
+                    
+                    6 Contract
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.8" data-path="coding.html">
+            
+                <a href="coding.html">
+            
+                    
+                    7 Code Style
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="release.html">
+            
+                <a href="release.html">
+            
+                    
+                    9 Versions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
+            
+                <a href="contribution.html">
+            
+                    
+                    10 Contribution
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.11" data-path="checklist.html">
+            
+                <a href="checklist.html">
+            
+                    
+                    11 Checklist
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="code-smell.html">
+            
+                <a href="code-smell.html">
+            
+                    
+                    12 Code Smell
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="TCK.html">
+            
+                <a href="TCK.html">
+            
+                    
+                    13 TCK
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >11 Checklist</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <h1 id="checklist">Checklist</h1>
+<h2 id="checklist-before-release">Checklist before release</h2>
+<ul>
+<li>github milestones</li>
+<li>github change lists</li>
+<li>Travis CI</li>
+<li>test code</li>
+<li>find bugs</li>
+</ul>
+<h2 id="checklist-for-bigfix-versions">Checklist for bigfix versions</h2>
+<ul>
+<li>Create a <em>github issue</em> before coding</li>
+<li>Create <em>unit test</em> before bugfix</li>
+<li>Review</li>
+<li>Test your code (Normal process / Abnormal process)</li>
+<li>Record your design on <em>github issue</em></li>
+<li>Complete javadoc and comment in code</li>
+<li>Manager for every version, responsible for scope and check</li>
+</ul>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="contribution.html" class="navigation navigation-prev " aria-label="Previous page: 10 Contribution">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="code-smell.html" class="navigation navigation-next " aria-label="Next page: 12 Code Smell">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"11 Checklist","level":"1.11","depth":1,"next":{"title":"12 Code Smell","level":"1.12","depth":1,"path":"code-smell.md","ref":"./code-smell.md","articles":[]},"previous":{"title":"10 Contribution","level":"1.10","depth":1,"path":"contribution.md","ref":"./contribution.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"checklist.md","mtime":"2018-03-19T06:46:50.841Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+
diff --git a/books/dubbo-dev-book-en/code-smell.html b/books/dubbo-dev-book-en/code-smell.html
index f7d68f9f..0d13fce7 100644
--- a/books/dubbo-dev-book-en/code-smell.html
+++ b/books/dubbo-dev-book-en/code-smell.html
@@ -60,7 +60,7 @@
     <link rel="next" href="TCK.html" />
     
     
-    <link rel="prev" href="checklist.md" />
+    <link rel="prev" href="checklist.html" />
     
 
     </head>
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="design.md">
+        <li class="chapter " data-level="1.3" data-path="design.html">
             
-                <span>
+                <a href="design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="implementation.md">
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
             
-                <span>
+                <a href="implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="contract.md">
+        <li class="chapter " data-level="1.7" data-path="contract.html">
             
-                <span>
+                <a href="contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="coding.md">
+        <li class="chapter " data-level="1.8" data-path="coding.html">
             
-                <span>
+                <a href="coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="contribution.md">
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
             
-                <span>
+                <a href="contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="checklist.md">
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
             
-                <span>
+                <a href="checklist.html">
             
                     
                     11 Checklist
@@ -789,7 +789,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
 
             
                 
-                <a href="checklist.md" class="navigation navigation-prev " aria-label="Previous page: 11 Checklist">
+                <a href="checklist.html" class="navigation navigation-prev " aria-label="Previous page: 11 Checklist">
                     <i class="fa fa-angle-left"></i>
                 </a>
                 
@@ -805,7 +805,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"12 Code Smell","level":"1.12","depth":1,"next":{"title":"13 TCK","level":"1.13","depth":1,"path":"TCK.md","ref":"./TCK.md","articles":[]},"previous":{"title":"11 Checklist","level":"1.11","depth":1,"path":"checklist.md","ref":"./checklist.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"code-smell.md","mtime":"2017-12-26T02:28:23.722Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"12 Code Smell","level":"1.12","depth":1,"next":{"title":"13 TCK","level":"1.13","depth":1,"path":"TCK.md","ref":"./TCK.md","articles":[]},"previous":{"title":"11 Checklist","level":"1.11","depth":1,"path":"checklist.md","ref":"./checklist.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"code-smell.md","mtime":"2018-03-19T06:46:50.841Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/coding.html b/books/dubbo-dev-book-en/coding.html
new file mode 100644
index 00000000..e6f36ff9
--- /dev/null
+++ b/books/dubbo-dev-book-en/coding.html
@@ -0,0 +1,786 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <meta charset="UTF-8">
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <title>7 Code Style · GitBook</title>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.2.3">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="release.html" />
+    
+    
+    <link rel="prev" href="contract.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="build.html">
+            
+                <a href="build.html">
+            
+                    
+                    1 How To Build
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.3" data-path="design.html">
+            
+                <a href="design.html">
+            
+                    
+                    2 Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="SPI.html">
+            
+                <a href="SPI.html">
+            
+                    
+                    3 How SPI Works
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
+            
+                <a href="implementation.html">
+            
+                    
+                    4 Init, Process, Protocols
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="impls/introduction.html">
+            
+                <a href="impls/introduction.html">
+            
+                    
+                    5 SPI Extensions
+            
+                </a>
+            
+
+            
+            <ul class="articles">
+                
+    
+        <li class="chapter " data-level="1.6.1" data-path="impls/protocol.html">
+            
+                <a href="impls/protocol.html">
+            
+                    
+                    5.1 Protocol
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.2" data-path="impls/filter.html">
+            
+                <a href="impls/filter.html">
+            
+                    
+                    5.2 Filter
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.3" data-path="impls/invoker-listener.html">
+            
+                <a href="impls/invoker-listener.html">
+            
+                    
+                    5.3 InvokerListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.4" data-path="impls/exporter-listener.html">
+            
+                <a href="impls/exporter-listener.html">
+            
+                    
+                    5.4 ExporterListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.5" data-path="impls/cluster.html">
+            
+                <a href="impls/cluster.html">
+            
+                    
+                    5.5 Cluster
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.6" data-path="impls/router.html">
+            
+                <a href="impls/router.html">
+            
+                    
+                    5.6 Router
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.7" data-path="impls/load-balance.html">
+            
+                <a href="impls/load-balance.html">
+            
+                    
+                    5.7 LoadBalance
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.8" data-path="impls/merger.html">
+            
+                <a href="impls/merger.html">
+            
+                    
+                    5.8 Merger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.9" data-path="impls/registry.html">
+            
+                <a href="impls/registry.html">
+            
+                    
+                    5.9 Registry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.10" data-path="impls/monitor.html">
+            
+                <a href="impls/monitor.html">
+            
+                    
+                    5.10 Monitor
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.11" data-path="impls/extension-factory.html">
+            
+                <a href="impls/extension-factory.html">
+            
+                    
+                    5.11 ExtensionFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.12" data-path="impls/proxy-factory.html">
+            
+                <a href="impls/proxy-factory.html">
+            
+                    
+                    5.12 ProxyFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.13" data-path="impls/compiler.html">
+            
+                <a href="impls/compiler.html">
+            
+                    
+                    5.13 Compiler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.14" data-path="impls/dispatcher.html">
+            
+                <a href="impls/dispatcher.html">
+            
+                    
+                    5.14 Dispatcher
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.15" data-path="impls/threadpool.html">
+            
+                <a href="impls/threadpool.html">
+            
+                    
+                    5.15 Threadpool
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.16" data-path="impls/serialize.html">
+            
+                <a href="impls/serialize.html">
+            
+                    
+                    5.16 Serialization
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.17" data-path="impls/remoting.html">
+            
+                <a href="impls/remoting.html">
+            
+                    
+                    5.17 Remoting
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.18" data-path="impls/exchanger.html">
+            
+                <a href="impls/exchanger.html">
+            
+                    
+                    5.18 Exchanger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.19" data-path="impls/networker.html">
+            
+                <a href="impls/networker.html">
+            
+                    
+                    5.19 Networker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.20" data-path="impls/telnet-handler.html">
+            
+                <a href="impls/telnet-handler.html">
+            
+                    
+                    5.20 TelnetHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.21" data-path="impls/status-checker.html">
+            
+                <a href="impls/status-checker.html">
+            
+                    
+                    5.21 StatusChecker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.22" data-path="impls/container.html">
+            
+                <a href="impls/container.html">
+            
+                    
+                    5.22 Container
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.23" data-path="impls/page.html">
+            
+                <a href="impls/page.html">
+            
+                    
+                    5.23 PageHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.24" data-path="impls/cache.html">
+            
+                <a href="impls/cache.html">
+            
+                    
+                    5.24 Cache
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.25" data-path="impls/validation.html">
+            
+                <a href="impls/validation.html">
+            
+                    
+                    5.25 Validation
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.26" data-path="impls/logger-adapter.html">
+            
+                <a href="impls/logger-adapter.html">
+            
+                    
+                    5.26 LoggerAdapter
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+            </ul>
+            
+        </li>
+    
+        <li class="chapter " data-level="1.7" data-path="contract.html">
+            
+                <a href="contract.html">
+            
+                    
+                    6 Contract
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.8" data-path="coding.html">
+            
+                <a href="coding.html">
+            
+                    
+                    7 Code Style
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="release.html">
+            
+                <a href="release.html">
+            
+                    
+                    9 Versions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
+            
+                <a href="contribution.html">
+            
+                    
+                    10 Contribution
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
+            
+                <a href="checklist.html">
+            
+                    
+                    11 Checklist
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="code-smell.html">
+            
+                <a href="code-smell.html">
+            
+                    
+                    12 Code Smell
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="TCK.html">
+            
+                <a href="TCK.html">
+            
+                    
+                    13 TCK
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >7 Code Style</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <h1 id="coding-convention">Coding convention</h1>
+<h2 id="code-style">Code style</h2>
+<p>The source and JavaDoc of Dubbo follow below specifications:</p>
+<ul>
+<li><a href="http://www.oracle.com/technetwork/java/codeconvtoc-136057.html" target="_blank">Code Conventions for the Java Programming Language</a></li>
+<li><a href="http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html" target="_blank">How to Write Doc Comments for the Javadoc Tool</a></li>
+</ul>
+<h2 id="exception-and-logging">Exception and Logging</h2>
+<ul>
+<li>Log more context information as possible, such as error reason, error server address, client address, registry center address, dubbo version and so on.</li>
+<li>Try to put the main cause at the front, and display all other context information with key-value paris after it.</li>
+<li>Log is not printed where the exception is thrown, log level is determined by the final exception handler, and must print log when dicarding exception.</li>
+<li><code>ERROR</code> log means NEED TO ALARM, <code>WARN</code> log means COULD AUTO RECOVERY, <code>INFO</code> long mean NORMAL.</li>
+<li>Suggestion: config <code>ERROR</code> log in Monitor center for real-time alarm, summary and send <code>WARN</code> log weekly.</li>
+<li><code>RpcException</code> is the ONLY external exception of Dubbo&#xFF0C;all internal exceptions mush be transfered to <code>RpcException</code> if need to throw out to user.</li>
+<li><code>RpcException</code> CAN NOT have sub-class, all types of information are identified with ErrorCode in order to keep compatible.</li>
+</ul>
+<h2 id="configuration-and-url">Configuration and URL</h2>
+<ul>
+<li>Use initials and camelCase for multiple words for object properties <sup><a href="#fn_1" id="reffn_1">1</a></sup>.</li>
+<li>Use lowercase and split by &apos;-&apos; for multiple words for config properties <sup><a href="#fn_2" id="reffn_2">2</a></sup>.</li>
+<li>Use lowercase and split by &apos;.&apos; for multiple words for URL properties <sup><a href="#fn_3" id="reffn_3">3</a></sup>.</li>
+<li>Use URL transfer parameters as possible, Don&apos;t define Map or other types, config information also transfer to URL style.</li>
+<li>Minimize URL nesting to keep URL simplicity.</li>
+</ul>
+<h2 id="unit-testing-and-integration-testing">Unit testing and integration testing</h2>
+<ul>
+<li>Use JUnit and EasyMock for unit testing, use TestNG for integration testing, use DBUnit for database testing.</li>
+<li>Don&apos;t put large integration test case in unit testing for running speed of unit test case.</li>
+<li>Use <code>try...finally</code> or <code>tearDown</code> to release resource for all test cases of unit testing.</li>
+<li>Minimize test case that with <code>while</code> loop which need waiting repsonse, use to make the logic in timer as function for timer and net testing.</li>
+<li>For fail-safe testing, unified use <code>LogUtil</code> assertion log output.</li>
+</ul>
+<h2 id="extension-point-base-class-and-aop">Extension point base class and AOP</h2>
+<ul>
+<li>AOP class should be named as <code>XxxWrapper</code>&#xFF0C;Base class should be named as <code>AbstractXxx</code>.</li>
+<li>Use AOP for combine relationship between extension points, <code>ExtensionLoader</code> only loads extension points, including AOP extension.</li>
+<li>Try to use Ioc inject dependency of extension points, Don&apos;t direct dependent on factory method of <code>ExtensionLoader</code>.</li>
+<li>Try to use AOP implement the common action of extension points, instead of using base class, such as the <code>isAvailable</code> checking before load balancing, which is independent of load balance. Close the URL paramters which no need to check.</li>
+<li>Use base class for abstaction for a variety of similar types, such as RMI, Hessian 3rd protocols which have generated interface proxy, only transfer interface proxy to <code>Invoker</code> to complete bridging, and public base class can do the logic.</li>
+<li>The base class is also part of the SPI, and each extension should have a convenient base class support.</li>
+</ul>
+<h2 id="module-and-packaging">Module and packaging</h2>
+<ul>
+<li>Base on reusability for packaging, dividing the interface, base class and large implementation into separate modules.</li>
+<li>Put all interfaces under the base package of module, and put base classes in support subpackage, different implementations are placed under the subpackage named by extension point.</li>
+<li>Try to keep subpackage dependent on parent package, NOT reverse.</li>
+</ul>
+<blockquote id="fn_1">
+<sup>1</sup>. Java convention<a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
+</blockquote>
+<blockquote id="fn_2">
+<sup>2</sup>. Spring convention<a href="#reffn_2" title="Jump back to footnote [2] in the text."> &#x21A9;</a>
+</blockquote>
+<blockquote id="fn_3">
+<sup>3</sup>. Dubbo convention<a href="#reffn_3" title="Jump back to footnote [3] in the text."> &#x21A9;</a>
+</blockquote>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="contract.html" class="navigation navigation-prev " aria-label="Previous page: 6 Contract">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="release.html" class="navigation navigation-next " aria-label="Next page: 9 Versions">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"7 Code Style","level":"1.8","depth":1,"next":{"title":"9 Versions","level":"1.9","depth":1,"path":"release.md","ref":"./release.md","articles":[]},"previous":{"title":"6 Contract","level":"1.7","depth":1,"path":"contract.md","ref":"./contract.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"coding.md","mtime":"2018-03-19T06:46:50.841Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+
diff --git a/books/dubbo-dev-book-en/contract.html b/books/dubbo-dev-book-en/contract.html
new file mode 100644
index 00000000..710c1c9b
--- /dev/null
+++ b/books/dubbo-dev-book-en/contract.html
@@ -0,0 +1,742 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <meta charset="UTF-8">
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <title>6 Contract · GitBook</title>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.2.3">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="coding.html" />
+    
+    
+    <link rel="prev" href="impls/logger-adapter.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="build.html">
+            
+                <a href="build.html">
+            
+                    
+                    1 How To Build
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.3" data-path="design.html">
+            
+                <a href="design.html">
+            
+                    
+                    2 Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="SPI.html">
+            
+                <a href="SPI.html">
+            
+                    
+                    3 How SPI Works
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
+            
+                <a href="implementation.html">
+            
+                    
+                    4 Init, Process, Protocols
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="impls/introduction.html">
+            
+                <a href="impls/introduction.html">
+            
+                    
+                    5 SPI Extensions
+            
+                </a>
+            
+
+            
+            <ul class="articles">
+                
+    
+        <li class="chapter " data-level="1.6.1" data-path="impls/protocol.html">
+            
+                <a href="impls/protocol.html">
+            
+                    
+                    5.1 Protocol
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.2" data-path="impls/filter.html">
+            
+                <a href="impls/filter.html">
+            
+                    
+                    5.2 Filter
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.3" data-path="impls/invoker-listener.html">
+            
+                <a href="impls/invoker-listener.html">
+            
+                    
+                    5.3 InvokerListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.4" data-path="impls/exporter-listener.html">
+            
+                <a href="impls/exporter-listener.html">
+            
+                    
+                    5.4 ExporterListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.5" data-path="impls/cluster.html">
+            
+                <a href="impls/cluster.html">
+            
+                    
+                    5.5 Cluster
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.6" data-path="impls/router.html">
+            
+                <a href="impls/router.html">
+            
+                    
+                    5.6 Router
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.7" data-path="impls/load-balance.html">
+            
+                <a href="impls/load-balance.html">
+            
+                    
+                    5.7 LoadBalance
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.8" data-path="impls/merger.html">
+            
+                <a href="impls/merger.html">
+            
+                    
+                    5.8 Merger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.9" data-path="impls/registry.html">
+            
+                <a href="impls/registry.html">
+            
+                    
+                    5.9 Registry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.10" data-path="impls/monitor.html">
+            
+                <a href="impls/monitor.html">
+            
+                    
+                    5.10 Monitor
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.11" data-path="impls/extension-factory.html">
+            
+                <a href="impls/extension-factory.html">
+            
+                    
+                    5.11 ExtensionFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.12" data-path="impls/proxy-factory.html">
+            
+                <a href="impls/proxy-factory.html">
+            
+                    
+                    5.12 ProxyFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.13" data-path="impls/compiler.html">
+            
+                <a href="impls/compiler.html">
+            
+                    
+                    5.13 Compiler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.14" data-path="impls/dispatcher.html">
+            
+                <a href="impls/dispatcher.html">
+            
+                    
+                    5.14 Dispatcher
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.15" data-path="impls/threadpool.html">
+            
+                <a href="impls/threadpool.html">
+            
+                    
+                    5.15 Threadpool
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.16" data-path="impls/serialize.html">
+            
+                <a href="impls/serialize.html">
+            
+                    
+                    5.16 Serialization
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.17" data-path="impls/remoting.html">
+            
+                <a href="impls/remoting.html">
+            
+                    
+                    5.17 Remoting
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.18" data-path="impls/exchanger.html">
+            
+                <a href="impls/exchanger.html">
+            
+                    
+                    5.18 Exchanger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.19" data-path="impls/networker.html">
+            
+                <a href="impls/networker.html">
+            
+                    
+                    5.19 Networker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.20" data-path="impls/telnet-handler.html">
+            
+                <a href="impls/telnet-handler.html">
+            
+                    
+                    5.20 TelnetHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.21" data-path="impls/status-checker.html">
+            
+                <a href="impls/status-checker.html">
+            
+                    
+                    5.21 StatusChecker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.22" data-path="impls/container.html">
+            
+                <a href="impls/container.html">
+            
+                    
+                    5.22 Container
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.23" data-path="impls/page.html">
+            
+                <a href="impls/page.html">
+            
+                    
+                    5.23 PageHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.24" data-path="impls/cache.html">
+            
+                <a href="impls/cache.html">
+            
+                    
+                    5.24 Cache
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.25" data-path="impls/validation.html">
+            
+                <a href="impls/validation.html">
+            
+                    
+                    5.25 Validation
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.26" data-path="impls/logger-adapter.html">
+            
+                <a href="impls/logger-adapter.html">
+            
+                    
+                    5.26 LoggerAdapter
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+            </ul>
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.7" data-path="contract.html">
+            
+                <a href="contract.html">
+            
+                    
+                    6 Contract
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.8" data-path="coding.html">
+            
+                <a href="coding.html">
+            
+                    
+                    7 Code Style
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="release.html">
+            
+                <a href="release.html">
+            
+                    
+                    9 Versions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
+            
+                <a href="contribution.html">
+            
+                    
+                    10 Contribution
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
+            
+                <a href="checklist.html">
+            
+                    
+                    11 Checklist
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="code-smell.html">
+            
+                <a href="code-smell.html">
+            
+                    
+                    12 Code Smell
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="TCK.html">
+            
+                <a href="TCK.html">
+            
+                    
+                    13 TCK
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >6 Contract</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <h1 id="public-agreement">Public Agreement</h1>
+<p>This document is Dubbo public agreement, we expect all extension points comply with it.</p>
+<h2 id="url">URL</h2>
+<ul>
+<li>All extension points must include URL parameter, design URL as a context information which throughouts the whole extension point design system.</li>
+<li>URL standard style: <code>protocol://username:password@host:port/path?key=value&amp;key=value</code></li>
+</ul>
+<h2 id="logging">Logging</h2>
+<ul>
+<li>Print <code>ERROR</code> log for unrecoverable and NEED TO ALARM situation.</li>
+<li>Print <code>WARN</code> log for recoverable exception or transient state inconsistency.</li>
+<li>Print <code>INFO</code> log for normally status.</li>
+</ul>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="impls/logger-adapter.html" class="navigation navigation-prev " aria-label="Previous page: 5.26 LoggerAdapter">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="coding.html" class="navigation navigation-next " aria-label="Next page: 7 Code Style">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"6 Contract","level":"1.7","depth":1,"next":{"title":"7 Code Style","level":"1.8","depth":1,"path":"coding.md","ref":"./coding.md","articles":[]},"previous":{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"contract.md","mtime":"2018-03-19T06:46:50.842Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+
diff --git a/books/dubbo-dev-book-en/contribution.html b/books/dubbo-dev-book-en/contribution.html
new file mode 100644
index 00000000..14d4dbb2
--- /dev/null
+++ b/books/dubbo-dev-book-en/contribution.html
@@ -0,0 +1,1093 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <meta charset="UTF-8">
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <title>10 Contribution · GitBook</title>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.2.3">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="checklist.html" />
+    
+    
+    <link rel="prev" href="release.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="build.html">
+            
+                <a href="build.html">
+            
+                    
+                    1 How To Build
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.3" data-path="design.html">
+            
+                <a href="design.html">
+            
+                    
+                    2 Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="SPI.html">
+            
+                <a href="SPI.html">
+            
+                    
+                    3 How SPI Works
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
+            
+                <a href="implementation.html">
+            
+                    
+                    4 Init, Process, Protocols
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="impls/introduction.html">
+            
+                <a href="impls/introduction.html">
+            
+                    
+                    5 SPI Extensions
+            
+                </a>
+            
+
+            
+            <ul class="articles">
+                
+    
+        <li class="chapter " data-level="1.6.1" data-path="impls/protocol.html">
+            
+                <a href="impls/protocol.html">
+            
+                    
+                    5.1 Protocol
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.2" data-path="impls/filter.html">
+            
+                <a href="impls/filter.html">
+            
+                    
+                    5.2 Filter
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.3" data-path="impls/invoker-listener.html">
+            
+                <a href="impls/invoker-listener.html">
+            
+                    
+                    5.3 InvokerListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.4" data-path="impls/exporter-listener.html">
+            
+                <a href="impls/exporter-listener.html">
+            
+                    
+                    5.4 ExporterListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.5" data-path="impls/cluster.html">
+            
+                <a href="impls/cluster.html">
+            
+                    
+                    5.5 Cluster
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.6" data-path="impls/router.html">
+            
+                <a href="impls/router.html">
+            
+                    
+                    5.6 Router
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.7" data-path="impls/load-balance.html">
+            
+                <a href="impls/load-balance.html">
+            
+                    
+                    5.7 LoadBalance
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.8" data-path="impls/merger.html">
+            
+                <a href="impls/merger.html">
+            
+                    
+                    5.8 Merger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.9" data-path="impls/registry.html">
+            
+                <a href="impls/registry.html">
+            
+                    
+                    5.9 Registry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.10" data-path="impls/monitor.html">
+            
+                <a href="impls/monitor.html">
+            
+                    
+                    5.10 Monitor
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.11" data-path="impls/extension-factory.html">
+            
+                <a href="impls/extension-factory.html">
+            
+                    
+                    5.11 ExtensionFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.12" data-path="impls/proxy-factory.html">
+            
+                <a href="impls/proxy-factory.html">
+            
+                    
+                    5.12 ProxyFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.13" data-path="impls/compiler.html">
+            
+                <a href="impls/compiler.html">
+            
+                    
+                    5.13 Compiler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.14" data-path="impls/dispatcher.html">
+            
+                <a href="impls/dispatcher.html">
+            
+                    
+                    5.14 Dispatcher
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.15" data-path="impls/threadpool.html">
+            
+                <a href="impls/threadpool.html">
+            
+                    
+                    5.15 Threadpool
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.16" data-path="impls/serialize.html">
+            
+                <a href="impls/serialize.html">
+            
+                    
+                    5.16 Serialization
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.17" data-path="impls/remoting.html">
+            
+                <a href="impls/remoting.html">
+            
+                    
+                    5.17 Remoting
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.18" data-path="impls/exchanger.html">
+            
+                <a href="impls/exchanger.html">
+            
+                    
+                    5.18 Exchanger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.19" data-path="impls/networker.html">
+            
+                <a href="impls/networker.html">
+            
+                    
+                    5.19 Networker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.20" data-path="impls/telnet-handler.html">
+            
+                <a href="impls/telnet-handler.html">
+            
+                    
+                    5.20 TelnetHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.21" data-path="impls/status-checker.html">
+            
+                <a href="impls/status-checker.html">
+            
+                    
+                    5.21 StatusChecker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.22" data-path="impls/container.html">
+            
+                <a href="impls/container.html">
+            
+                    
+                    5.22 Container
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.23" data-path="impls/page.html">
+            
+                <a href="impls/page.html">
+            
+                    
+                    5.23 PageHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.24" data-path="impls/cache.html">
+            
+                <a href="impls/cache.html">
+            
+                    
+                    5.24 Cache
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.25" data-path="impls/validation.html">
+            
+                <a href="impls/validation.html">
+            
+                    
+                    5.25 Validation
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.26" data-path="impls/logger-adapter.html">
+            
+                <a href="impls/logger-adapter.html">
+            
+                    
+                    5.26 LoggerAdapter
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+            </ul>
+            
+        </li>
+    
+        <li class="chapter " data-level="1.7" data-path="contract.html">
+            
+                <a href="contract.html">
+            
+                    
+                    6 Contract
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.8" data-path="coding.html">
+            
+                <a href="coding.html">
+            
+                    
+                    7 Code Style
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="release.html">
+            
+                <a href="release.html">
+            
+                    
+                    9 Versions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.10" data-path="contribution.html">
+            
+                <a href="contribution.html">
+            
+                    
+                    10 Contribution
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
+            
+                <a href="checklist.html">
+            
+                    
+                    11 Checklist
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="code-smell.html">
+            
+                <a href="code-smell.html">
+            
+                    
+                    12 Code Smell
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="TCK.html">
+            
+                <a href="TCK.html">
+            
+                    
+                    13 TCK
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >10 Contribution</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <style>
+table {
+  width: 100%;
+  max-width: 65em;
+  border: 1px solid #dedede;
+  margin: 15px auto;
+  border-collapse: collapse;
+  empty-cells: show;
+}
+table th,
+table td {
+  height: 35px;
+  border: 1px solid #dedede;
+  padding: 0 10px;
+}
+table th {
+  font-weight: bold;
+  text-align: center !important;
+  background: rgba(158,188,226,0.2);
+  white-space: nowrap;
+}
+table tbody tr:nth-child(2n) {
+  background: rgba(158,188,226,0.12);
+}
+table td:nth-child(1) {
+  white-space: nowrap;
+}
+table tr:hover {
+  background: #efefef;
+}
+.table-area {
+  overflow: auto;
+}
+</style>
+
+<p><script type="text/javascript">
+[].slice.call(document.querySelectorAll('table')).forEach(function(el){
+    var wrapper = document.createElement('div');
+    wrapper.className = 'table-area';
+    el.parentNode.insertBefore(wrapper, el);
+    el.parentNode.removeChild(el);
+    wrapper.appendChild(el);
+})
+</script></p>
+<h1 id="contribution">Contribution</h1>
+<h2 id="flow">Flow</h2>
+<ul>
+<li>Direct adding new project, black-box dependent on Dubbo for function extension.</li>
+<li>Fork Dubbo on Github for BUG fixing or modify the framework.</li>
+<li>Pull Request after changing.</li>
+</ul>
+<h2 id="tasks">Tasks</h2>
+<table>
+<thead>
+<tr>
+<th>Funcation</th>
+<th>Type</th>
+<th>Priority</th>
+<th>Status</th>
+<th>Claimer</th>
+<th>Plan complete time</th>
+<th>progress</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><use guideline=""></use> Translation</td>
+<td>Document</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td><developing guideline=""> translation</developing></td>
+<td>Document</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Extension point compatibility testing</td>
+<td>Testing</td>
+<td>High</td>
+<td>Claimed</td>
+<td>&#x7F57;&#x7ACB;&#x6811;</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Performance benchmark testing</td>
+<td>Testing</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Functional unit testing</td>
+<td>Testing</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JTA/XA distributed transaction</td>
+<td>Interceptor extension</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Thrift</td>
+<td>Protocol extension</td>
+<td>High</td>
+<td>Developing done</td>
+<td>&#x95FE;&#x521A;</td>
+<td>2012-04-27</td>
+<td>90%</td>
+</tr>
+<tr>
+<td>ICE</td>
+<td>Protocol extension</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>ACE</td>
+<td>Protocol extension</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JSON-RPC</td>
+<td>Protocol extension</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>XML-RPC</td>
+<td>Protocol extension</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JSR181&amp;CXF(WebService)</td>
+<td>Protocol extension</td>
+<td>High</td>
+<td>Developing done</td>
+<td>&#x767D;&#x6587;&#x5FD7;</td>
+<td>2012-04-27</td>
+<td>90%</td>
+</tr>
+<tr>
+<td>JSR311&amp;JSR339(RestfulWebService)</td>
+<td>Protocol extension</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JMS&amp;ActiveMQ</td>
+<td>Protocol extension</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Protobuf</td>
+<td>Serialization extension</td>
+<td>High</td>
+<td>Researching</td>
+<td>&#x6731;&#x542F;&#x6052;</td>
+<td>2012-02-30</td>
+<td>20%</td>
+</tr>
+<tr>
+<td>Avro</td>
+<td>Serialization extension</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>XSocket</td>
+<td>Transmission extension</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>CGLib</td>
+<td>Dynamic proxy extension</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JNDI</td>
+<td>Registry extension</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>LDAP</td>
+<td>Registry extension</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JSR140&amp;SLP</td>
+<td>Registry extension</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>UDDI</td>
+<td>Registry extension</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JMX</td>
+<td>Monitoring expansion</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>SNMP</td>
+<td>Monitoring expansion</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Cacti</td>
+<td>Monitoring expansion</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Nagios</td>
+<td>Monitoring expansion</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Logstash</td>
+<td>Monitoring expansion</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JRobin</td>
+<td>Monitoring expansion</td>
+<td>High</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Maven</td>
+<td>Package management</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>Subversion</td>
+<td>Package management</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>JCR/JSR283</td>
+<td>Package management</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>SimpleDeployer</td>
+<td>Local deployment agent</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+<tr>
+<td>SimpleScheduler</td>
+<td>Scheduler</td>
+<td>Low</td>
+<td>Unclaimed</td>
+<td>Pending</td>
+<td>Pending</td>
+<td>0%</td>
+</tr>
+</tbody>
+</table>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="release.html" class="navigation navigation-prev " aria-label="Previous page: 9 Versions">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="checklist.html" class="navigation navigation-next " aria-label="Next page: 11 Checklist">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"10 Contribution","level":"1.10","depth":1,"next":{"title":"11 Checklist","level":"1.11","depth":1,"path":"checklist.md","ref":"./checklist.md","articles":[]},"previous":{"title":"9 Versions","level":"1.9","depth":1,"path":"release.md","ref":"./release.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"contribution.md","mtime":"2018-03-19T06:46:50.842Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+
diff --git a/books/dubbo-dev-book-en/design.html b/books/dubbo-dev-book-en/design.html
new file mode 100644
index 00000000..19627e8d
--- /dev/null
+++ b/books/dubbo-dev-book-en/design.html
@@ -0,0 +1,811 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <meta charset="UTF-8">
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <title>2 Architecture · GitBook</title>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.2.3">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="SPI.html" />
+    
+    
+    <link rel="prev" href="build.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="build.html">
+            
+                <a href="build.html">
+            
+                    
+                    1 How To Build
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.3" data-path="design.html">
+            
+                <a href="design.html">
+            
+                    
+                    2 Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="SPI.html">
+            
+                <a href="SPI.html">
+            
+                    
+                    3 How SPI Works
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
+            
+                <a href="implementation.html">
+            
+                    
+                    4 Init, Process, Protocols
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="impls/introduction.html">
+            
+                <a href="impls/introduction.html">
+            
+                    
+                    5 SPI Extensions
+            
+                </a>
+            
+
+            
+            <ul class="articles">
+                
+    
+        <li class="chapter " data-level="1.6.1" data-path="impls/protocol.html">
+            
+                <a href="impls/protocol.html">
+            
+                    
+                    5.1 Protocol
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.2" data-path="impls/filter.html">
+            
+                <a href="impls/filter.html">
+            
+                    
+                    5.2 Filter
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.3" data-path="impls/invoker-listener.html">
+            
+                <a href="impls/invoker-listener.html">
+            
+                    
+                    5.3 InvokerListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.4" data-path="impls/exporter-listener.html">
+            
+                <a href="impls/exporter-listener.html">
+            
+                    
+                    5.4 ExporterListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.5" data-path="impls/cluster.html">
+            
+                <a href="impls/cluster.html">
+            
+                    
+                    5.5 Cluster
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.6" data-path="impls/router.html">
+            
+                <a href="impls/router.html">
+            
+                    
+                    5.6 Router
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.7" data-path="impls/load-balance.html">
+            
+                <a href="impls/load-balance.html">
+            
+                    
+                    5.7 LoadBalance
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.8" data-path="impls/merger.html">
+            
+                <a href="impls/merger.html">
+            
+                    
+                    5.8 Merger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.9" data-path="impls/registry.html">
+            
+                <a href="impls/registry.html">
+            
+                    
+                    5.9 Registry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.10" data-path="impls/monitor.html">
+            
+                <a href="impls/monitor.html">
+            
+                    
+                    5.10 Monitor
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.11" data-path="impls/extension-factory.html">
+            
+                <a href="impls/extension-factory.html">
+            
+                    
+                    5.11 ExtensionFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.12" data-path="impls/proxy-factory.html">
+            
+                <a href="impls/proxy-factory.html">
+            
+                    
+                    5.12 ProxyFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.13" data-path="impls/compiler.html">
+            
+                <a href="impls/compiler.html">
+            
+                    
+                    5.13 Compiler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.14" data-path="impls/dispatcher.html">
+            
+                <a href="impls/dispatcher.html">
+            
+                    
+                    5.14 Dispatcher
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.15" data-path="impls/threadpool.html">
+            
+                <a href="impls/threadpool.html">
+            
+                    
+                    5.15 Threadpool
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.16" data-path="impls/serialize.html">
+            
+                <a href="impls/serialize.html">
+            
+                    
+                    5.16 Serialization
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.17" data-path="impls/remoting.html">
+            
+                <a href="impls/remoting.html">
+            
+                    
+                    5.17 Remoting
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.18" data-path="impls/exchanger.html">
+            
+                <a href="impls/exchanger.html">
+            
+                    
+                    5.18 Exchanger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.19" data-path="impls/networker.html">
+            
+                <a href="impls/networker.html">
+            
+                    
+                    5.19 Networker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.20" data-path="impls/telnet-handler.html">
+            
+                <a href="impls/telnet-handler.html">
+            
+                    
+                    5.20 TelnetHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.21" data-path="impls/status-checker.html">
+            
+                <a href="impls/status-checker.html">
+            
+                    
+                    5.21 StatusChecker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.22" data-path="impls/container.html">
+            
+                <a href="impls/container.html">
+            
+                    
+                    5.22 Container
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.23" data-path="impls/page.html">
+            
+                <a href="impls/page.html">
+            
+                    
+                    5.23 PageHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.24" data-path="impls/cache.html">
+            
+                <a href="impls/cache.html">
+            
+                    
+                    5.24 Cache
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.25" data-path="impls/validation.html">
+            
+                <a href="impls/validation.html">
+            
+                    
+                    5.25 Validation
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.26" data-path="impls/logger-adapter.html">
+            
+                <a href="impls/logger-adapter.html">
+            
+                    
+                    5.26 LoggerAdapter
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+            </ul>
+            
+        </li>
+    
+        <li class="chapter " data-level="1.7" data-path="contract.html">
+            
+                <a href="contract.html">
+            
+                    
+                    6 Contract
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.8" data-path="coding.html">
+            
+                <a href="coding.html">
+            
+                    
+                    7 Code Style
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="release.html">
+            
+                <a href="release.html">
+            
+                    
+                    9 Versions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
+            
+                <a href="contribution.html">
+            
+                    
+                    10 Contribution
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
+            
+                <a href="checklist.html">
+            
+                    
+                    11 Checklist
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="code-smell.html">
+            
+                <a href="code-smell.html">
+            
+                    
+                    12 Code Smell
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="TCK.html">
+            
+                <a href="TCK.html">
+            
+                    
+                    13 TCK
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >2 Architecture</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <h1 id="framework-design">Framework Design</h1>
+<h2 id="overall-design">Overall design</h2>
+<p><img src="sources/images/dubbo-framework.jpg" alt="/dev-guide/images/dubbo-framework.jpg"></p>
+<p>Image description:</p>
+<ul>
+<li>Left area with light blue background shows service consumer interfaces, Right area with light green background shows service provider interfaces, center area shows both side interfaces.</li>
+<li>The image is divided into 10 layers from the bottom to the top, and the layers are one-way dependence. The black arrow on the right represents the dependency between layers, and each layer can be stripped from the upper layer to be reused, the Service and Config layers are API, and the other layers are SPI.</li>
+<li>Green boxes are extension interfaces, blue boxes are implementation classes, image only shows implementation class of associated layers.</li>
+<li>The blue dashed line is the initialization process, which is assembly chain when starting, red line for the method call process, which is calling chain when running, purple triangle arrow is inherited, can treat subclass as the same node of parent class, text of lines are the method invocation.</li>
+</ul>
+<h2 id="layer-description">Layer description</h2>
+<ul>
+<li><strong>config layer</strong>: external config interface, <code>ServiceConfig</code> and <code>ReferenceConfig</code> is the center of the layer, you can directly initialize config class, also can generate config class by spring.</li>
+<li><strong>proxy layer</strong>: transparent proxy of service interface, generate client Stub of service and server Skeletion of service, <code>ServiceProxy</code> is the center, extension interface is <code>ProxyFactory</code>.</li>
+<li><strong>registry layer</strong>: encapsulation of service registry and discovery, service URL is the center, extension interfaces are <code>RegistryFactory</code>, <code>Registry</code> and <code>RegistryService</code>.</li>
+<li><strong>cluster layer</strong>: encapsulation of cluster of muliple providers and load balance, and bridging registration center, <code>Invoker</code> is the center, extension interfaces are <code>Cluster</code>, <code>Directory</code>, <code>Router</code>, <code>LoadBalance</code>.</li>
+<li><strong>monitor layer</strong>: monitor of RPC call times and call execute time, <code>Statistics</code> is the center, extension interface are <code>MonitorFactory</code>, <code>Monitor</code>, <code>MonitorService</code></li>
+<li><strong>protocol layer</strong>: encapsulation of RPC, <code>Invocation</code> and <code>Result</code> are the center, extension interfaces are <code>Protocol</code>, <code>Invoker</code>, <code>Exporter</code></li>
+<li><strong>exchange layer</strong>: encapsulation of request and response, synchronous transfer asynchronous, <code>Request</code> and <code>Response</code> are the center, extension interfaces are <code>Exchanger</code>, <code>ExchangeChannel</code>, <code>ExchangeClient</code>, <code>ExchangeServer</code></li>
+<li><strong>transport layer</strong>: abstraction of mina and netty, <code>Message</code> is the center, extension interfaces are <code>Channel</code>, <code>Transporter</code>, <code>Client</code>, <code>Server</code>, <code>Codec</code></li>
+<li><strong>serialize layer</strong>: reusable tools, extension interfaces are <code>Serialization</code>, <code>ObjectInput</code>, <code>ObjectOutput</code>, <code>ThreadPool</code></li>
+</ul>
+<h2 id="relationship-description">Relationship description</h2>
+<ul>
+<li>In RPC, Protocol is the core layer, it means that you can complete RPC calling by Protocol + Invoker + Exporter, then filter at the main process of Invoker.</li>
+<li>Consumer and Provider are abstraction concepts, just want you have a more intuitive understanding of which classes belong to the client and server side, the reason not use Client and Server is that Dubbo uses Provider, Consumer, Registry, Monitor divide logical topology node in many scenes, keep the concept of unity.</li>
+<li>Cluster is external concept, the purpose of Cluster is that make various Invoker disguise to one Invoker, so that we just pay attention to the Invoker in Protocol layer, adding Cluster or removing Cluster will not affect other layers, because we don&apos;t need Cluster when only have one provider.</li>
+<li>The Proxy layer encapsulates the transparent proxy for all interfaces, and in other layers with Invoker as the center, turn Invoker into interface, or turn interface implementation into Invoker by Proxy only when exposuring to user. RPC still work even removing Proxy layer, but not so transparent, making remote service calling don&apos;t look like local service calling.</li>
+<li>Remoting is the implemetation of Dubbo protocols, you can remove Remoting if choosing RMI. The Remoting is divided into Transport layer and Exchange layer, Transport layer is responsible for one-way message transmission, it&apos;s abstraction of Mina, Netty, Grizzly, it also can extend UDP transmission. The Exchange layer encapsulates the Request-Response semantics over the transport layer.</li>
+<li>Actually Registry and Monitor are not at the same layer, they are independent nodes, draw them together by layer just for global view.</li>
+</ul>
+<h2 id="modules-packaging">Modules packaging</h2>
+<p><img src="sources/images/dubbo-modules.jpg" alt="/dev-guide/images/dubbo-modules.jpg"></p>
+<p>Modules description:</p>
+<ul>
+<li><strong>dubbo-common module</strong>: includes Util classes and common modules.</li>
+<li><strong>dubbo-remoting module</strong>: is Dubbo protocol implementation, no need to use this module if using RMI for RPC.</li>
+<li><strong>dubbo-rpc module</strong>: abstraction of various protocols, and dynamic proxy, only one to one call, not concerned with the management of cluster.</li>
+<li><strong>dubbo-cluster module</strong>: disguise many service providers as one provider, including load balancing, fault tolerance, routing, etc. the address list of clusters can be either static or send by registry.</li>
+<li><strong>dubbo-registry module</strong>: Based on the cluster of registry send address and the abstraction of various registry centers.</li>
+<li><strong>dubbo-monitor module</strong>: statistics of service call times, call time, call chain tracked services.</li>
+<li><strong>dubbo-config module</strong>: is Dubbo external API, users use Dubbo by Config, hide Dubbo details.</li>
+<li><strong>dubbo-container module</strong>: is a Standlone container, just use Main method to load Spring, because usually service no need Tomcat/JBoss features.</li>
+</ul>
+<p>Package dividing according to the layer structure, and the difference with layer dividing:</p>
+<ul>
+<li>container is service container, for service running deployment, not showed in the image.</li>
+<li>protocol layer and proxy layer are placed in RPC module, they are the core of RPC module, you can use these 2 layers complete RPC call when only have 1 provider.</li>
+<li>transport layer and exchange layer are placed in remoting module, for RPC call base comminucation.</li>
+<li>serialize layer is placed in common module, for reuse.</li>
+</ul>
+<h2 id="dependence-relationship">Dependence relationship</h2>
+<p><img src="sources/images/dubbo-relation.jpg" alt="/dev-guide/images/dubbo-relation.jpg"></p>
+<p>Image description:</p>
+<ul>
+<li>The boxes in image, Protocol, Cluster, Proxy, Service, Container, Registry, Monitor represent layer or module, the blues mean interactive with business, the greens mean only internal interactive with Dubbo.</li>
+<li>The backgroud boxes in image, Consumer, Provider, Registry, Monitor represent deployment logical topology node.</li>
+<li>The blue dashed line in the image is called for initialization, the red dashed line is called asynchronously for runtime, and the red line is called synchronously for runtime.</li>
+<li>The image only includes RPC layer, don&apos;t includes Remoting layer, the whole Remoting hides in Protocol layer.</li>
+</ul>
+<h2 id="call-chain">Call chain</h2>
+<p>Expand the red call chain of the overall design map:</p>
+<p><img src="sources/images/dubbo-extension.jpg" alt="/dev-guide/images/dubbo-extension.jpg"></p>
+<h2 id="expose-service-sequence">Expose service sequence</h2>
+<p>Expand the initialization chain of service provider exposes service which at the left of the overall design map, the sequence diagram shows below:</p>
+<p><img src="sources/images/dubbo-export.jpg" alt="/dev-guide/images/dubbo-export.jpg"></p>
+<h2 id="reference-service-sequence">Reference service sequence</h2>
+<p>Expand the initialization chain of service consumer references service which at the right of the overall design map, the sequence diagram shows below:</p>
+<p><img src="sources/images/dubbo-refer.jpg" alt="/dev-guide/images/dubbo-refer.jpg"></p>
+<h2 id="domain-model">Domain model</h2>
+<p>The core domain models of Dubbo:</p>
+<ul>
+<li>Protocol is service domain, it is the main function entrance of Invoker exposure and reference, it is responsible for the life cycle management of Invoker.</li>
+<li>Invoker is entity domain, it is the core model of Dubbo, all the other models are disturbed, or converted to it, it represents an executable, you can call it by calling invoke, it can be a local implementation, a remote implementation, or a cluster implementation.</li>
+<li>Invocation is session domain, it holds variables in the calling process, such as the method name, the parameters, and so on.</li>
+</ul>
+<h2 id="base-design-principle">Base design principle</h2>
+<ul>
+<li>Use Microkernel + Plugin design pattern&#xFF0C;Microkernel only responsible for assembly Plugin, the functions of Dubbo are implemented by extension points, it means that all functions of Dubbo can be replaced by self defined extension by user.</li>
+<li>Use URL to be the startdard format of config information, all extension points transfer config information by URL.</li>
+</ul>
+<p>More design principles refer to: <a href="principals/introduction.md">Framework design principle</a></p>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="build.html" class="navigation navigation-prev " aria-label="Previous page: 1 How To Build">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="SPI.html" class="navigation navigation-next " aria-label="Next page: 3 How SPI Works">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"2 Architecture","level":"1.3","depth":1,"next":{"title":"3 How SPI Works","level":"1.4","depth":1,"path":"SPI.md","ref":"./SPI.md","articles":[]},"previous":{"title":"1 How To Build","level":"1.2","depth":1,"path":"build.md","ref":"./build.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"design.md","mtime":"2018-03-19T06:46:50.842Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+
diff --git a/books/dubbo-dev-book-en/implementation.html b/books/dubbo-dev-book-en/implementation.html
new file mode 100644
index 00000000..ab51c7f9
--- /dev/null
+++ b/books/dubbo-dev-book-en/implementation.html
@@ -0,0 +1,828 @@
+
+<!DOCTYPE HTML>
+<html lang="" >
+    <head>
+        <meta charset="UTF-8">
+        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+        <title>4 Init, Process, Protocols · GitBook</title>
+        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+        <meta name="description" content="">
+        <meta name="generator" content="GitBook 3.2.3">
+        
+        
+        
+    
+    <link rel="stylesheet" href="gitbook/style.css">
+
+    
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-search/search.css">
+                
+            
+                
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-fontsettings/website.css">
+                
+            
+        
+
+    
+
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+        
+    
+
+        
+    
+    
+    <meta name="HandheldFriendly" content="true"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+    <meta name="apple-mobile-web-app-capable" content="yes">
+    <meta name="apple-mobile-web-app-status-bar-style" content="black">
+    <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
+    <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
+
+    
+    <link rel="next" href="impls/introduction.html" />
+    
+    
+    <link rel="prev" href="SPI.html" />
+    
+
+    </head>
+    <body>
+        
+<div class="book">
+    <div class="book-summary">
+        
+            
+<div id="book-search-input" role="search">
+    <input type="text" placeholder="Type to search" />
+</div>
+
+            
+                <nav role="navigation">
+                
+
+
+<ul class="summary">
+    
+    
+
+    
+
+    
+        
+        
+    
+        <li class="chapter " data-level="1.1" data-path="./">
+            
+                <a href="./">
+            
+                    
+                    Introduction
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.2" data-path="build.html">
+            
+                <a href="build.html">
+            
+                    
+                    1 How To Build
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.3" data-path="design.html">
+            
+                <a href="design.html">
+            
+                    
+                    2 Architecture
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.4" data-path="SPI.html">
+            
+                <a href="SPI.html">
+            
+                    
+                    3 How SPI Works
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter active" data-level="1.5" data-path="implementation.html">
+            
+                <a href="implementation.html">
+            
+                    
+                    4 Init, Process, Protocols
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6" data-path="impls/introduction.html">
+            
+                <a href="impls/introduction.html">
+            
+                    
+                    5 SPI Extensions
+            
+                </a>
+            
+
+            
+            <ul class="articles">
+                
+    
+        <li class="chapter " data-level="1.6.1" data-path="impls/protocol.html">
+            
+                <a href="impls/protocol.html">
+            
+                    
+                    5.1 Protocol
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.2" data-path="impls/filter.html">
+            
+                <a href="impls/filter.html">
+            
+                    
+                    5.2 Filter
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.3" data-path="impls/invoker-listener.html">
+            
+                <a href="impls/invoker-listener.html">
+            
+                    
+                    5.3 InvokerListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.4" data-path="impls/exporter-listener.html">
+            
+                <a href="impls/exporter-listener.html">
+            
+                    
+                    5.4 ExporterListener
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.5" data-path="impls/cluster.html">
+            
+                <a href="impls/cluster.html">
+            
+                    
+                    5.5 Cluster
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.6" data-path="impls/router.html">
+            
+                <a href="impls/router.html">
+            
+                    
+                    5.6 Router
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.7" data-path="impls/load-balance.html">
+            
+                <a href="impls/load-balance.html">
+            
+                    
+                    5.7 LoadBalance
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.8" data-path="impls/merger.html">
+            
+                <a href="impls/merger.html">
+            
+                    
+                    5.8 Merger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.9" data-path="impls/registry.html">
+            
+                <a href="impls/registry.html">
+            
+                    
+                    5.9 Registry
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.10" data-path="impls/monitor.html">
+            
+                <a href="impls/monitor.html">
+            
+                    
+                    5.10 Monitor
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.11" data-path="impls/extension-factory.html">
+            
+                <a href="impls/extension-factory.html">
+            
+                    
+                    5.11 ExtensionFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.12" data-path="impls/proxy-factory.html">
+            
+                <a href="impls/proxy-factory.html">
+            
+                    
+                    5.12 ProxyFactory
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.13" data-path="impls/compiler.html">
+            
+                <a href="impls/compiler.html">
+            
+                    
+                    5.13 Compiler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.14" data-path="impls/dispatcher.html">
+            
+                <a href="impls/dispatcher.html">
+            
+                    
+                    5.14 Dispatcher
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.15" data-path="impls/threadpool.html">
+            
+                <a href="impls/threadpool.html">
+            
+                    
+                    5.15 Threadpool
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.16" data-path="impls/serialize.html">
+            
+                <a href="impls/serialize.html">
+            
+                    
+                    5.16 Serialization
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.17" data-path="impls/remoting.html">
+            
+                <a href="impls/remoting.html">
+            
+                    
+                    5.17 Remoting
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.18" data-path="impls/exchanger.html">
+            
+                <a href="impls/exchanger.html">
+            
+                    
+                    5.18 Exchanger
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.19" data-path="impls/networker.html">
+            
+                <a href="impls/networker.html">
+            
+                    
+                    5.19 Networker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.20" data-path="impls/telnet-handler.html">
+            
+                <a href="impls/telnet-handler.html">
+            
+                    
+                    5.20 TelnetHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.21" data-path="impls/status-checker.html">
+            
+                <a href="impls/status-checker.html">
+            
+                    
+                    5.21 StatusChecker
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.22" data-path="impls/container.html">
+            
+                <a href="impls/container.html">
+            
+                    
+                    5.22 Container
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.23" data-path="impls/page.html">
+            
+                <a href="impls/page.html">
+            
+                    
+                    5.23 PageHandler
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.24" data-path="impls/cache.html">
+            
+                <a href="impls/cache.html">
+            
+                    
+                    5.24 Cache
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.25" data-path="impls/validation.html">
+            
+                <a href="impls/validation.html">
+            
+                    
+                    5.25 Validation
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.6.26" data-path="impls/logger-adapter.html">
+            
+                <a href="impls/logger-adapter.html">
+            
+                    
+                    5.26 LoggerAdapter
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+            </ul>
+            
+        </li>
+    
+        <li class="chapter " data-level="1.7" data-path="contract.html">
+            
+                <a href="contract.html">
+            
+                    
+                    6 Contract
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.8" data-path="coding.html">
+            
+                <a href="coding.html">
+            
+                    
+                    7 Code Style
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.9" data-path="release.html">
+            
+                <a href="release.html">
+            
+                    
+                    9 Versions
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
+            
+                <a href="contribution.html">
+            
+                    
+                    10 Contribution
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
+            
+                <a href="checklist.html">
+            
+                    
+                    11 Checklist
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.12" data-path="code-smell.html">
+            
+                <a href="code-smell.html">
+            
+                    
+                    12 Code Smell
+            
+                </a>
+            
+
+            
+        </li>
+    
+        <li class="chapter " data-level="1.13" data-path="TCK.html">
+            
+                <a href="TCK.html">
+            
+                    
+                    13 TCK
+            
+                </a>
+            
+
+            
+        </li>
+    
+
+    
+
+    <li class="divider"></li>
+
+    <li>
+        <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
+            Published with GitBook
+        </a>
+    </li>
+</ul>
+
+
+                </nav>
+            
+        
+    </div>
+
+    <div class="book-body">
+        
+            <div class="body-inner">
+                
+                    
+
+<div class="book-header" role="navigation">
+    
+
+    <!-- Title -->
+    <h1>
+        <i class="fa fa-circle-o-notch fa-spin"></i>
+        <a href="." >4 Init, Process, Protocols</a>
+    </h1>
+</div>
+
+
+
+
+                    <div class="page-wrapper" tabindex="-1" role="main">
+                        <div class="page-inner">
+                            
+<div id="book-search-results">
+    <div class="search-noresults">
+    
+                                <section class="normal markdown-section">
+                                
+                                <h1 id="implementation-details">Implementation details</h1>
+<h2 id="initialization-details">Initialization details</h2>
+<h3 id="service-parsing">Service parsing</h3>
+<p>Based on <code>META-INF/spring.handlers</code> config in dubbo.jar, Spring calls <code>DubboNamespaceHandler</code> when meeting dubbo namespace.</p>
+<p>All Dubbo tags are parsed by <code>DubboBeanDefinitionParser</code>, based on one to one attribute mapping, the XML label is parsed as a Bean object.</p>
+<p>Transfer Bean object to URL, and transfer all attributes of Bean to URL parameters when <code>ServiceConfig.export()</code> or <code>ReferenceConfig.get()</code> initialization.</p>
+<p>Then pase URL to <a href="impls/protocol.html">Protocol extension point</a>, based on <a href="SPI.html">Extension point adaptive mechanism</a> of extension point, processing service exposure or reference for different protocols according to URL protocol header.</p>
+<h3 id="service-exposure">Service Exposure</h3>
+<h4 id="1-only-expose-service-port">1. Only expose service port:</h4>
+<p>Direct exposing to provider when have not Registry, <sup><a href="#fn_1" id="reffn_1">1</a></sup>, the URL format which parsing by <code>ServiceConfig</code>:
+<code>dubbo://service-host/com.foo.FooService?version=1.0.0</code>.</p>
+<p>Based on extension point adaptive mechanism, call <code>export()</code> method of <code>DubboProtocol</code> and open server port by identifying <code>dubbo://</code> protocol header of URL.</p>
+<h4 id="2-expose-to-registry">2. Expose to Registry:</h4>
+<p>Expose provider address to Registry <sup><a href="#fn_2" id="reffn_2">2</a></sup>, the URL format which parsing by <code>ServiceConfig</code>: <code>registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(&quot;dubbo://service-host/com.foo.FooService?version=1.0.0&quot;)</code>&#xFF0C;</p>
+<p>Based on extension point adaptive mechanism, call <code>export()</code> method of <code>RegistryProtocol</code> by identifying  <code>registry://</code> protocol header, register the provider URL parameter of <code>export</code> to Registry.</p>
+<p>Resend to <code>Protocol</code> extension point to do exposure: <code>dubbo://service-host/com.foo.FooService?version=1.0.0</code>, then based on extension point adaptive mechanism, call <code>export()</code> method of <code>DubboProtocol</code> and open server port by identifying <code>dubbo://</code> protocol header of provider URL.</p>
+<h3 id="service-reference">Service Reference</h3>
+<h4 id="1-direct-connect-service">1. Direct connect service</h4>
+<p>Direct connect provider when have not Registry <sup><a href="#fn_3" id="reffn_3">3</a></sup>, the URL format which parsing by <code>ReferenceConfig</code>: <code>dubbo://service-host/com.foo.FooService?version=1.0.0</code>.</p>
+<p>Based on extension point adaptive mechanism, call <code>refer()</code> method of <code>DubboProtocol</code> by identifying <code>dubbo://</code> protocol header of URL, and return provider reference.</p>
+<h4 id="2-service-registry-discovery">2. Service Registry discovery</h4>
+<p>Discover provider address by Registry <sup><a href="#fn_4" id="reffn_4">4</a></sup>, the URL format which parsing by <code>ReferenceConfig</code>:
+<code>registry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode(&quot;consumer://consumer-host/com.foo.FooService?version=1.0.0&quot;)</code>.</p>
+<p>Based on extension point adaptive mechanism, call <code>refer()</code> method of <code>RegistryProtocol</code> by identifying <code>registry://</code> protocol header of URL, then based on the condition of parameter of <code>refer</code> to search provider URL, for example: <code>dubbo://service-host/com.foo.FooService?version=1.0.0</code>.</p>
+<p>Then based on extension point adaptive mechanism, call <code>refer()</code> method of <code>DubboProtocol</code> to get provider reference by identifying <code>dubbo://</code> protocol header of provider URL.</p>
+<p>Then <code>RegistryProtocol</code> disguise various provider references to single provider by <code>Cluster</code> extension point and return.</p>
+<h3 id="service-filter">Service Filter</h3>
+<p>Based on extension point adaptive mechanism, all <code>Protocol</code> extension points are auto wrapped <code>Wrapper</code> class.</p>
+<p>Based on <code>ProtocolFilterWrapper</code> class, make all <code>Filter</code> as chain, call the real reference at the end of the chain.</p>
+<p>Based on <code>ProtocolListenerWrapper</code> class, make all <code>InvokerListener</code> and <code>ExporterListener</code> as list, perform call back before and after exposure and reference.</p>
+<p>All additional functions would be implementated by <code>Filter</code>, including Monitor.</p>
+<h2 id="rpc-details">RPC details</h2>
+<h3 id="the-detail-process-of-exposing-service-by-service-provider">The detail process of exposing service by service provider</h3>
+<p><img src="sources/images/dubbo_rpc_export.jpg" alt="/dev-guide/images/dubbo_rpc_export.jpg"></p>
+<p>The above image shows the main process of exposing service by service provider:</p>
+<p>First <code>ServiceConfig</code> class get the actual class <code>ref</code> that provides service(e.g. &#x5982;&#xFF1A;HelloWorldImpl), then generating a <code>AbstractProxyInvoker</code> instance by the <code>getInvoker</code> method of <code>ProxyFactory</code> class, to this step, complete the transformation of specific service to <code>Invoker</code>, next is the process of converting <code>Invoker</code> to <code>Exporter</code>.</p>
+<p>The key of Dubbo processing service exposure is the process of converting <code>Invoker</code> to <code>Exporter</code>, the red part in the above image. Here we introduce the implementation of the two typical protocols, Dubbo and RMI:</p>
+<h4 id="dubbo-implementation">Dubbo implementation</h4>
+<p>The transformation from <code>Invoker</code> of Dubbo protocol to <code>Exporter</code> takes place in the <code>export</code> method of <code>DubboProtocol</code> class, it mainly opens the socket to listen service and receive all kinds of requests sent by the client, and the communication details are implementated by Dubbo itself.</p>
+<h4 id="rmi-implementation">RMI implementation</h4>
+<p>The transformation from <code>Invoker</code> of RMI protocol to <code>Exporter</code> takes place in the <code>export</code> method of <code>RmiProtocol</code> class, the RMI service is implementated by Spring, Dubbo or JDK, and the communication details are implementated by JDK, which saves a lot of work.</p>
+<h3 id="the-detail-process-of-serving-service-for-service-consumer">The detail process of serving service for service consumer</h3>
+<p><img src="sources/images/dubbo_rpc_refer.jpg" alt="/dev-guide/images/dubbo_rpc_refer.jpg"></p>
+<p>The above image is the main process of service consumption:</p>
+<p>First, the <code>init</code> method of <code>ReferenceConfig</code> class calls the <code>refer</code> method of <code>Protocol</code> to generate <code>Invoker</code> instance(such as the red part in the above image), which is the key of service consumption. Then the <code>Invoker</code> is converted to the interface required by the client (such as: HelloWorld).</p>
+<p>For each protocol such as RMI/Dubbo/Web service, the details they call <code>refer</code> method generate <code>Invoker</code> instance are similar to the previous section.</p>
+<h3 id="invoker-everywhere">Invoker everywhere</h3>
+<p>Because of <code>Invoker</code> is a very important concept in the Dubbo domain model, many of the design ideas are close to it. This makes <code>Invoker</code> permeate the entire implementation code, and it&apos;s really easy to mix up for people who have just started Dubbo.</p>
+<p>Let&apos;s use a simple image below to describe the 2 important <code>Invoker</code>: service provider <code>Invoker</code> and service consumer <code>Invoker</code>:</p>
+<p><img src="sources/images/dubbo_rpc_invoke.jpg" alt="/dev-guide/images/dubbo_rpc_invoke.jpg"></p>
+<p>To better explain the above image, we provide the below code examples of service consumption and providers:</p>
+<p>Service consumer code:</p>
+<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DemoClientAction</span> </span>{
+
+    <span class="hljs-keyword">private</span> DemoService demoService;
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setDemoService</span><span class="hljs-params">(DemoService demoService)</span> </span>{
+        <span class="hljs-keyword">this</span>.demoService = demoService;
+    }
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">start</span><span class="hljs-params">()</span> </span>{
+        String hello = demoService.sayHello(<span class="hljs-string">&quot;world&quot;</span> + i);
+    }
+}
+</code></pre>
+<p>The <code>DemoService</code> in above code is the proxy of service consumer in above image, user can call <code>Invoker</code> <sup><a href="#fn_5" id="reffn_5">5</a></sup> which implementate the real RPC by the proxy.</p>
+<p>Service provider code:</p>
+<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DemoServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">DemoService</span> </span>{
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">sayHello</span><span class="hljs-params">(String name)</span> <span class="hljs-keyword">throws</span> RemoteException </span>{
+        <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;Hello &quot;</span> + name;
+    }
+}
+</code></pre>
+<p>The above class would be encapsulated to be a <code>AbstractProxyInvoker</code> instance, and create a new <code>Exporter</code> instance, then find corresponding <code>Exporter</code> instance and call its corresponding <code>AbstractProxyInvoker</code> instance when network communication layer recieve request, so that real call service provider code. There are some other <code>Invoker</code> classes, but the above 2 are the most important.</p>
+<h2 id="remote-communication-details">Remote communication details</h2>
+<h3 id="protocol-header-agreement">Protocol header agreement</h3>
+<p><img src="sources/images/dubbo_protocol_header.jpg" alt="/dev-guide/images/dubbo_protocol_header.jpg"></p>
+<h3 id="thread-dispatch-model">Thread dispatch model</h3>
+<p><img src="sources/images/dubbo-protocol.jpg" alt="/dev-guide/images/dubbo-protocol.jpg"></p>
+<ul>
+<li>Dispather: <code>all</code>, <code>direct</code>, <code>message</code>, <code>execution</code>, <code>connection</code></li>
+<li>ThreadPool: <code>fixed</code>, <code>cached</code></li>
+</ul>
+<blockquote id="fn_1">
+<sup>1</sup>. is <code>&lt;dubbo:service regisrty=&quot;N/A&quot; /&gt;</code> or <code>&lt;dubbo:registry address=&quot;N/A&quot; /&gt;</code><a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
+</blockquote>
+<blockquote id="fn_2">
+<sup>2</sup>. is <code>&lt;dubbo:registry address=&quot;zookeeper://10.20.153.10:2181&quot; /&gt;</code><a href="#reffn_2" title="Jump back to footnote [2] in the text."> &#x21A9;</a>
+</blockquote>
+<blockquote id="fn_3">
+<sup>3</sup>. is <code>&lt;dubbo:reference url=&quot;dubbo://service-host/com.foo.FooService?version=1.0.0&quot; /&gt;</code><a href="#reffn_3" title="Jump back to footnote [3] in the text."> &#x21A9;</a>
+</blockquote>
+<blockquote id="fn_4">
+<sup>4</sup>. is <code>&lt;dubbo:registry address=&quot;zookeeper://10.20.153.10:2181&quot; /&gt;</code><a href="#reffn_4" title="Jump back to footnote [4] in the text."> &#x21A9;</a>
+</blockquote>
+<blockquote id="fn_5">
+<sup>5</sup>. is one of <code>DubboInvoker</code>, <code>HessianRpcInvoker</code>, <code>InjvmInvoker</code>, <code>RmiInvoker</code>, <code>WebServiceInvoker</code><a href="#reffn_5" title="Jump back to footnote [5] in the text."> &#x21A9;</a>
+</blockquote>
+
+                                
+                                </section>
+                            
+    </div>
+    <div class="search-results">
+        <div class="has-results">
+            
+            <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1>
+            <ul class="search-results-list"></ul>
+            
+        </div>
+        <div class="no-results">
+            
+            <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1>
+            
+        </div>
+    </div>
+</div>
+
+                        </div>
+                    </div>
+                
+            </div>
+
+            
+                
+                <a href="SPI.html" class="navigation navigation-prev " aria-label="Previous page: 3 How SPI Works">
+                    <i class="fa fa-angle-left"></i>
+                </a>
+                
+                
+                <a href="impls/introduction.html" class="navigation navigation-next " aria-label="Next page: 5 SPI Extensions">
+                    <i class="fa fa-angle-right"></i>
+                </a>
+                
+            
+        
+    </div>
+
+    <script>
+        var gitbook = gitbook || [];
+        gitbook.push(function() {
+            gitbook.page.hasChanged({"page":{"title":"4 Init, Process, Protocols","level":"1.5","depth":1,"next":{"title":"5 SPI Extensions","level":"1.6","depth":1,"path":"impls/introduction.md","ref":"./impls/introduction.md","articles":[{"title":"5.1 Protocol","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},{"title":"5.2 Filter","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},{"title":"5.5 Cluster","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},{"title":"5.6 Router","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},{"title":"5.8 Merger","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},{"title":"5.9 Registry","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},{"title":"5.10 Monitor","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},{"title":"5.13 Compiler","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},{"title":"5.16 Serialization","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},{"title":"5.17 Remoting","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},{"title":"5.19 Networker","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},{"title":"5.22 Container","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},{"title":"5.24 Cache","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},{"title":"5.25 Validation","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]}]},"previous":{"title":"3 How SPI Works","level":"1.4","depth":1,"path":"SPI.md","ref":"./SPI.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"implementation.md","mtime":"2018-03-19T06:46:50.842Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
+        });
+    </script>
+</div>
+
+        
+    <script src="gitbook/gitbook.js"></script>
+    <script src="gitbook/theme.js"></script>
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-search/search.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/lunr.min.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-lunr/search-lunr.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-sharing/buttons.js"></script>
+        
+    
+        
+        <script src="gitbook/gitbook-plugin-fontsettings/fontsettings.js"></script>
+        
+    
+
+    </body>
+</html>
+
diff --git a/books/dubbo-dev-book-en/impls/cache.html b/books/dubbo-dev-book-en/impls/cache.html
index 054a4ec7..8e2424e9 100644
--- a/books/dubbo-dev-book-en/impls/cache.html
+++ b/books/dubbo-dev-book-en/impls/cache.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -752,7 +752,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.24 Cache","level":"1.6.24","depth":2,"next":{"title":"5.25 Validation","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"previous":{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cache.md","mtime":"2017-12-26T02:28:23.722Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.24 Cache","level":"1.6.24","depth":2,"next":{"title":"5.25 Validation","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"previous":{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cache.md","mtime":"2018-03-19T06:46:50.843Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/cluster.html b/books/dubbo-dev-book-en/impls/cluster.html
index 2fad7031..803a8295 100644
--- a/books/dubbo-dev-book-en/impls/cluster.html
+++ b/books/dubbo-dev-book-en/impls/cluster.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -746,7 +746,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.5 Cluster","level":"1.6.5","depth":2,"next":{"title":"5.6 Router","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"previous":{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cluster.md","mtime":"2017-12-26T02:28:23.723Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.5 Cluster","level":"1.6.5","depth":2,"next":{"title":"5.6 Router","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"previous":{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cluster.md","mtime":"2018-03-19T06:46:50.843Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/compiler.html b/books/dubbo-dev-book-en/impls/compiler.html
index 00a9a2a2..ba633692 100644
--- a/books/dubbo-dev-book-en/impls/compiler.html
+++ b/books/dubbo-dev-book-en/impls/compiler.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -728,7 +728,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.13 Compiler","level":"1.6.13","depth":2,"next":{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"previous":{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/compiler.md","mtime":"2017-12-26T02:28:23.723Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.13 Compiler","level":"1.6.13","depth":2,"next":{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"previous":{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/compiler.md","mtime":"2018-03-19T06:46:50.843Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/container.html b/books/dubbo-dev-book-en/impls/container.html
index 6aa5a061..f0e587c3 100644
--- a/books/dubbo-dev-book-en/impls/container.html
+++ b/books/dubbo-dev-book-en/impls/container.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -734,7 +734,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.22 Container","level":"1.6.22","depth":2,"next":{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"previous":{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/container.md","mtime":"2017-12-26T02:28:23.723Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.22 Container","level":"1.6.22","depth":2,"next":{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"previous":{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/container.md","mtime":"2018-03-19T06:46:50.843Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/dispatcher.html b/books/dubbo-dev-book-en/impls/dispatcher.html
index 0fe4e05a..f72a4966 100644
--- a/books/dubbo-dev-book-en/impls/dispatcher.html
+++ b/books/dubbo-dev-book-en/impls/dispatcher.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -734,7 +734,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"next":{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"previous":{"title":"5.13 Compiler","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/dispatcher.md","mtime":"2017-12-26T02:28:23.724Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"next":{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"previous":{"title":"5.13 Compiler","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/dispatcher.md","mtime":"2018-03-19T06:46:50.844Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/exchanger.html b/books/dubbo-dev-book-en/impls/exchanger.html
index c1bc9b81..8053af4a 100644
--- a/books/dubbo-dev-book-en/impls/exchanger.html
+++ b/books/dubbo-dev-book-en/impls/exchanger.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -757,7 +757,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"next":{"title":"5.19 Networker","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"previous":{"title":"5.17 Remoting","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exchanger.md","mtime":"2017-12-26T02:28:23.724Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"next":{"title":"5.19 Networker","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"previous":{"title":"5.17 Remoting","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exchanger.md","mtime":"2018-03-19T06:46:50.844Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/exporter-listener.html b/books/dubbo-dev-book-en/impls/exporter-listener.html
index ef6f0a2b..07d84087 100644
--- a/books/dubbo-dev-book-en/impls/exporter-listener.html
+++ b/books/dubbo-dev-book-en/impls/exporter-listener.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -735,7 +735,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"next":{"title":"5.5 Cluster","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"previous":{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exporter-listener.md","mtime":"2017-12-26T02:28:23.724Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"next":{"title":"5.5 Cluster","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"previous":{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exporter-listener.md","mtime":"2018-03-19T06:46:50.844Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/extension-factory.html b/books/dubbo-dev-book-en/impls/extension-factory.html
index dfaf374a..37c6507c 100644
--- a/books/dubbo-dev-book-en/impls/extension-factory.html
+++ b/books/dubbo-dev-book-en/impls/extension-factory.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -729,7 +729,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"next":{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"previous":{"title":"5.10 Monitor","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/extension-factory.md","mtime":"2017-12-26T02:28:23.725Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"next":{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"previous":{"title":"5.10 Monitor","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/extension-factory.md","mtime":"2018-03-19T06:46:50.845Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/filter.html b/books/dubbo-dev-book-en/impls/filter.html
index e1536884..b477988b 100644
--- a/books/dubbo-dev-book-en/impls/filter.html
+++ b/books/dubbo-dev-book-en/impls/filter.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -761,7 +761,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.2 Filter","level":"1.6.2","depth":2,"next":{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"previous":{"title":"5.1 Protocol","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/filter.md","mtime":"2017-12-26T02:28:23.725Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.2 Filter","level":"1.6.2","depth":2,"next":{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"previous":{"title":"5.1 Protocol","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/filter.md","mtime":"2018-03-19T06:46:50.845Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/introduction.html b/books/dubbo-dev-book-en/impls/introduction.html
index 2892aadd..e85abab3 100644
--- a/books/dubbo-dev-book-en/impls/introduction.html
+++ b/books/dubbo-dev-book-en/impls/introduction.html
@@ -60,7 +60,7 @@
     <link rel="next" href="protocol.html" />
     
     
-    <link rel="prev" href="../implementation.md" />
+    <link rel="prev" href="../implementation.html" />
     
 
     </head>
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -676,7 +676,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
 
             
                 
-                <a href="../implementation.md" class="navigation navigation-prev " aria-label="Previous page: 4 Init, Process, Protocols">
+                <a href="../implementation.html" class="navigation navigation-prev " aria-label="Previous page: 4 Init, Process, Protocols">
                     <i class="fa fa-angle-left"></i>
                 </a>
                 
@@ -692,7 +692,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5 SPI Extensions","level":"1.6","depth":1,"next":{"title":"5.1 Protocol","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"previous":{"title":"4 Init, Process, Protocols","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/introduction.md","mtime":"2017-12-26T02:28:23.725Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5 SPI Extensions","level":"1.6","depth":1,"next":{"title":"5.1 Protocol","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"previous":{"title":"4 Init, Process, Protocols","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/introduction.md","mtime":"2018-03-19T06:46:50.845Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/invoker-listener.html b/books/dubbo-dev-book-en/impls/invoker-listener.html
index a3dbdd59..ae41cc3d 100644
--- a/books/dubbo-dev-book-en/impls/invoker-listener.html
+++ b/books/dubbo-dev-book-en/impls/invoker-listener.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -735,7 +735,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"next":{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"previous":{"title":"5.2 Filter","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/invoker-listener.md","mtime":"2017-12-26T02:28:23.726Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"next":{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"previous":{"title":"5.2 Filter","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/invoker-listener.md","mtime":"2018-03-19T06:46:50.845Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/load-balance.html b/books/dubbo-dev-book-en/impls/load-balance.html
index e5bf1bc6..3392f645 100644
--- a/books/dubbo-dev-book-en/impls/load-balance.html
+++ b/books/dubbo-dev-book-en/impls/load-balance.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -735,7 +735,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"next":{"title":"5.8 Merger","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"previous":{"title":"5.6 Router","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/load-balance.md","mtime":"2017-12-26T02:28:23.726Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"next":{"title":"5.8 Merger","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"previous":{"title":"5.6 Router","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/load-balance.md","mtime":"2018-03-19T06:46:50.846Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/logger-adapter.html b/books/dubbo-dev-book-en/impls/logger-adapter.html
index d7fc3f64..ec70024a 100644
--- a/books/dubbo-dev-book-en/impls/logger-adapter.html
+++ b/books/dubbo-dev-book-en/impls/logger-adapter.html
@@ -57,7 +57,7 @@
     <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
 
     
-    <link rel="next" href="../contract.md" />
+    <link rel="next" href="../contract.html" />
     
     
     <link rel="prev" href="validation.html" />
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -738,7 +738,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
                 </a>
                 
                 
-                <a href="../contract.md" class="navigation navigation-next " aria-label="Next page: 6 Contract">
+                <a href="../contract.html" class="navigation navigation-next " aria-label="Next page: 6 Contract">
                     <i class="fa fa-angle-right"></i>
                 </a>
                 
@@ -749,7 +749,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"next":{"title":"6 Contract","level":"1.7","depth":1,"path":"contract.md","ref":"./contract.md","articles":[]},"previous":{"title":"5.25 Validation","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/logger-adapter.md","mtime":"2017-12-26T02:28:23.726Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"next":{"title":"6 Contract","level":"1.7","depth":1,"path":"contract.md","ref":"./contract.md","articles":[]},"previous":{"title":"5.25 Validation","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/logger-adapter.md","mtime":"2018-03-19T06:46:50.846Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/merger.html b/books/dubbo-dev-book-en/impls/merger.html
index db2f5615..6dd56c3f 100644
--- a/books/dubbo-dev-book-en/impls/merger.html
+++ b/books/dubbo-dev-book-en/impls/merger.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -731,7 +731,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.8 Merger","level":"1.6.8","depth":2,"next":{"title":"5.9 Registry","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"previous":{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/merger.md","mtime":"2017-12-26T02:28:23.727Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.8 Merger","level":"1.6.8","depth":2,"next":{"title":"5.9 Registry","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"previous":{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/merger.md","mtime":"2018-03-19T06:46:50.847Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/monitor.html b/books/dubbo-dev-book-en/impls/monitor.html
index 9a2d8ca8..de748ffb 100644
--- a/books/dubbo-dev-book-en/impls/monitor.html
+++ b/books/dubbo-dev-book-en/impls/monitor.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -744,7 +744,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.10 Monitor","level":"1.6.10","depth":2,"next":{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"previous":{"title":"5.9 Registry","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/monitor.md","mtime":"2017-12-26T02:28:23.727Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.10 Monitor","level":"1.6.10","depth":2,"next":{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"previous":{"title":"5.9 Registry","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/monitor.md","mtime":"2018-03-19T06:46:50.847Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/networker.html b/books/dubbo-dev-book-en/impls/networker.html
index 7445ec4f..a77fe740 100644
--- a/books/dubbo-dev-book-en/impls/networker.html
+++ b/books/dubbo-dev-book-en/impls/networker.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -731,7 +731,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.19 Networker","level":"1.6.19","depth":2,"next":{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"previous":{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/networker.md","mtime":"2017-12-26T02:28:23.727Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.19 Networker","level":"1.6.19","depth":2,"next":{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"previous":{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/networker.md","mtime":"2018-03-19T06:46:50.847Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/page.html b/books/dubbo-dev-book-en/impls/page.html
index e21027a8..df4e02c8 100644
--- a/books/dubbo-dev-book-en/impls/page.html
+++ b/books/dubbo-dev-book-en/impls/page.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -733,7 +733,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"next":{"title":"5.24 Cache","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"previous":{"title":"5.22 Container","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/page.md","mtime":"2017-12-26T02:28:23.728Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"next":{"title":"5.24 Cache","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"previous":{"title":"5.22 Container","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/page.md","mtime":"2018-03-19T06:46:50.848Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/protocol.html b/books/dubbo-dev-book-en/impls/protocol.html
index 4344df22..7065b6ce 100644
--- a/books/dubbo-dev-book-en/impls/protocol.html
+++ b/books/dubbo-dev-book-en/impls/protocol.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -816,7 +816,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.1 Protocol","level":"1.6.1","depth":2,"next":{"title":"5.2 Filter","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"previous":{"title":"5 SPI Extensions","level":"1.6","depth":1,"path":"impls/introduction.md","ref":"./impls/introduction.md","articles":[{"title":"5.1 Protocol","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},{"title":"5.2 Filter","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},{"title":"5.5 Cluster","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},{"title":"5.6 Router","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},{"title":"5.8 Merger","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},{"title":"5.9 Registry","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},{"title":"5.10 Monitor","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},{"title":"5.13 Compiler","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},{"title":"5.16 Serialization","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},{"title":"5.17 Remoting","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},{"title":"5.19 Networker","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},{"title":"5.22 Container","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},{"title":"5.24 Cache","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},{"title":"5.25 Validation","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/protocol.md","mtime":"2017-12-26T02:28:23.728Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.1 Protocol","level":"1.6.1","depth":2,"next":{"title":"5.2 Filter","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"previous":{"title":"5 SPI Extensions","level":"1.6","depth":1,"path":"impls/introduction.md","ref":"./impls/introduction.md","articles":[{"title":"5.1 Protocol","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},{"title":"5.2 Filter","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},{"title":"5.3 InvokerListener","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},{"title":"5.4 ExporterListener","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},{"title":"5.5 Cluster","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},{"title":"5.6 Router","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},{"title":"5.8 Merger","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},{"title":"5.9 Registry","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},{"title":"5.10 Monitor","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},{"title":"5.13 Compiler","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},{"title":"5.16 Serialization","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},{"title":"5.17 Remoting","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},{"title":"5.19 Networker","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},{"title":"5.22 Container","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},{"title":"5.23 PageHandler","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},{"title":"5.24 Cache","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},{"title":"5.25 Validation","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/protocol.md","mtime":"2018-03-19T06:46:50.848Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/proxy-factory.html b/books/dubbo-dev-book-en/impls/proxy-factory.html
index e1abe416..28e2aa68 100644
--- a/books/dubbo-dev-book-en/impls/proxy-factory.html
+++ b/books/dubbo-dev-book-en/impls/proxy-factory.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -737,7 +737,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"next":{"title":"5.13 Compiler","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"previous":{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/proxy-factory.md","mtime":"2017-12-26T02:28:23.728Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.12 ProxyFactory","level":"1.6.12","depth":2,"next":{"title":"5.13 Compiler","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"previous":{"title":"5.11 ExtensionFactory","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/proxy-factory.md","mtime":"2018-03-19T06:46:50.848Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/registry.html b/books/dubbo-dev-book-en/impls/registry.html
index b76c953b..22789006 100644
--- a/books/dubbo-dev-book-en/impls/registry.html
+++ b/books/dubbo-dev-book-en/impls/registry.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -866,7 +866,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.9 Registry","level":"1.6.9","depth":2,"next":{"title":"5.10 Monitor","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"previous":{"title":"5.8 Merger","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/registry.md","mtime":"2017-12-26T02:28:23.729Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.9 Registry","level":"1.6.9","depth":2,"next":{"title":"5.10 Monitor","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"previous":{"title":"5.8 Merger","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/registry.md","mtime":"2018-03-19T06:46:50.848Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/remoting.html b/books/dubbo-dev-book-en/impls/remoting.html
index 04fd7c10..9abda719 100644
--- a/books/dubbo-dev-book-en/impls/remoting.html
+++ b/books/dubbo-dev-book-en/impls/remoting.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -790,7 +790,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.17 Remoting","level":"1.6.17","depth":2,"next":{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"previous":{"title":"5.16 Serialization","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/remoting.md","mtime":"2017-12-26T02:28:23.729Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.17 Remoting","level":"1.6.17","depth":2,"next":{"title":"5.18 Exchanger","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"previous":{"title":"5.16 Serialization","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/remoting.md","mtime":"2018-03-19T06:46:50.849Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/router.html b/books/dubbo-dev-book-en/impls/router.html
index 2c314073..1fc9d03d 100644
--- a/books/dubbo-dev-book-en/impls/router.html
+++ b/books/dubbo-dev-book-en/impls/router.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -732,7 +732,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.6 Router","level":"1.6.6","depth":2,"next":{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"previous":{"title":"5.5 Cluster","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/router.md","mtime":"2017-12-26T02:28:23.730Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.6 Router","level":"1.6.6","depth":2,"next":{"title":"5.7 LoadBalance","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"previous":{"title":"5.5 Cluster","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/router.md","mtime":"2018-03-19T06:46:50.849Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/serialize.html b/books/dubbo-dev-book-en/impls/serialize.html
index aea4b032..f378ace0 100644
--- a/books/dubbo-dev-book-en/impls/serialize.html
+++ b/books/dubbo-dev-book-en/impls/serialize.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -746,7 +746,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.16 Serialization","level":"1.6.16","depth":2,"next":{"title":"5.17 Remoting","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"previous":{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/serialize.md","mtime":"2017-12-26T02:28:23.730Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.16 Serialization","level":"1.6.16","depth":2,"next":{"title":"5.17 Remoting","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"previous":{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/serialize.md","mtime":"2018-03-19T06:46:50.850Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/status-checker.html b/books/dubbo-dev-book-en/impls/status-checker.html
index 872a334d..0d476fb2 100644
--- a/books/dubbo-dev-book-en/impls/status-checker.html
+++ b/books/dubbo-dev-book-en/impls/status-checker.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -736,7 +736,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"next":{"title":"5.22 Container","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"previous":{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/status-checker.md","mtime":"2017-12-26T02:28:23.731Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"next":{"title":"5.22 Container","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"previous":{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/status-checker.md","mtime":"2018-03-19T06:46:50.850Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/telnet-handler.html b/books/dubbo-dev-book-en/impls/telnet-handler.html
index e5ad8b47..2430384e 100644
--- a/books/dubbo-dev-book-en/impls/telnet-handler.html
+++ b/books/dubbo-dev-book-en/impls/telnet-handler.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -746,7 +746,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"next":{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"previous":{"title":"5.19 Networker","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/telnet-handler.md","mtime":"2017-12-26T02:28:23.731Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.20 TelnetHandler","level":"1.6.20","depth":2,"next":{"title":"5.21 StatusChecker","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"previous":{"title":"5.19 Networker","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/telnet-handler.md","mtime":"2018-03-19T06:46:50.850Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/threadpool.html b/books/dubbo-dev-book-en/impls/threadpool.html
index 1d0c3360..0661ebc5 100644
--- a/books/dubbo-dev-book-en/impls/threadpool.html
+++ b/books/dubbo-dev-book-en/impls/threadpool.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -732,7 +732,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"next":{"title":"5.16 Serialization","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"previous":{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/threadpool.md","mtime":"2017-12-26T02:28:23.732Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.15 Threadpool","level":"1.6.15","depth":2,"next":{"title":"5.16 Serialization","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"previous":{"title":"5.14 Dispatcher","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/threadpool.md","mtime":"2018-03-19T06:46:50.850Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/impls/validation.html b/books/dubbo-dev-book-en/impls/validation.html
index b4dea06f..d3493b63 100644
--- a/books/dubbo-dev-book-en/impls/validation.html
+++ b/books/dubbo-dev-book-en/impls/validation.html
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="../design.md">
+        <li class="chapter " data-level="1.3" data-path="../design.html">
             
-                <span>
+                <a href="../design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="../implementation.md">
+        <li class="chapter " data-level="1.5" data-path="../implementation.html">
             
-                <span>
+                <a href="../implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="../contract.md">
+        <li class="chapter " data-level="1.7" data-path="../contract.html">
             
-                <span>
+                <a href="../contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="../coding.md">
+        <li class="chapter " data-level="1.8" data-path="../coding.html">
             
-                <span>
+                <a href="../coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="../contribution.md">
+        <li class="chapter " data-level="1.10" data-path="../contribution.html">
             
-                <span>
+                <a href="../contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="../checklist.md">
+        <li class="chapter " data-level="1.11" data-path="../checklist.html">
             
-                <span>
+                <a href="../checklist.html">
             
                     
                     11 Checklist
@@ -742,7 +742,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.25 Validation","level":"1.6.25","depth":2,"next":{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]},"previous":{"title":"5.24 Cache","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/validation.md","mtime":"2017-12-26T02:28:23.732Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.25 Validation","level":"1.6.25","depth":2,"next":{"title":"5.26 LoggerAdapter","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]},"previous":{"title":"5.24 Cache","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/validation.md","mtime":"2018-03-19T06:46:50.851Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/index.html b/books/dubbo-dev-book-en/index.html
index e4d97dee..69adb80d 100644
--- a/books/dubbo-dev-book-en/index.html
+++ b/books/dubbo-dev-book-en/index.html
@@ -113,9 +113,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="design.md">
+        <li class="chapter " data-level="1.3" data-path="design.html">
             
-                <span>
+                <a href="design.html">
             
                     
                     2 Architecture
@@ -139,9 +139,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="implementation.md">
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
             
-                <span>
+                <a href="implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -509,9 +509,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="contract.md">
+        <li class="chapter " data-level="1.7" data-path="contract.html">
             
-                <span>
+                <a href="contract.html">
             
                     
                     6 Contract
@@ -522,9 +522,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="coding.md">
+        <li class="chapter " data-level="1.8" data-path="coding.html">
             
-                <span>
+                <a href="coding.html">
             
                     
                     7 Code Style
@@ -548,9 +548,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="contribution.md">
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
             
-                <span>
+                <a href="contribution.html">
             
                     
                     10 Contribution
@@ -561,9 +561,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="checklist.md">
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
             
-                <span>
+                <a href="checklist.html">
             
                     
                     11 Checklist
@@ -646,7 +646,7 @@ <h1>
                                 <section class="normal markdown-section">
                                 
                                 <h1 id="dubbo-dev-book">dubbo-dev-book</h1>
-<p>This book is mainly about the design principles of dubbo, also covers the following topics: extension, coding styles, versio, build, etc.. </p>
+<p>This book dives into the design principles of dubbo, mainly covers the following topics: extension, coding styles, versio, build, etc.</p>
 
                                 
                                 </section>
@@ -686,7 +686,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 How To Build","level":"1.2","depth":1,"path":"build.md","ref":"./build.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2017-12-26T02:28:23.720Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 How To Build","level":"1.2","depth":1,"path":"build.md","ref":"./build.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2018-03-19T06:46:50.839Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/introduction.html b/books/dubbo-dev-book-en/introduction.html
new file mode 100644
index 00000000..6e797000
--- /dev/null
+++ b/books/dubbo-dev-book-en/introduction.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <title>Apache Dubbo (incubating)</title>
+<!-- Begin Jekyll SEO tag v2.3.0 -->
+<title>Apache Dubbo (incubating) | Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.</title>
+<meta property="og:title" content="Apache Dubbo (incubating)" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:site_name" content="Apache Dubbo (incubating)" />
+<script type="application/ld+json">
+{"name":null,"description":"Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.","author":null,"@type":"WebPage","url":"/books/dubbo-dev-book-en/introduction.html","publisher":null,"image":null,"headline":"Apache Dubbo (incubating)","dateModified":null,"datePublished":null,"sameAs":null,"mainEntityOfPage":null,"@context":"http://schema.org"}</script>
+<!-- End Jekyll SEO tag -->
+
+    <meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework."/>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="theme-color" content="#157878">
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="/assets/css/style.css?v=5e4e78ddaf4ea9e9a1a5bb0ded1eae4ac241ca64">
+      <!--<script>-->
+      <!--var _hmt = _hmt || [];-->
+      <!--(function() {-->
+      <!--var hm = document.createElement("script");-->
+      <!--hm.src = "https://hm.baidu.com/hm.js?5d37fba14b64e6bc8e0be39b4a08a59d";-->
+      <!--var s = document.getElementsByTagName("script")[0]; -->
+      <!--s.parentNode.insertBefore(hm, s);-->
+      <!--})();-->
+      <!--</script>-->
+  </head>
+  <body>
+    <section class="page-header">
+      <h1 class="project-name"><a href="http://www.apache.org"><img src="images//asf-feather.svg" title="Apache Software Foundation" alt="Apache Software Foundation" style="width: 50px;vertical-align: bottom;" /></a>Apache Dubbo (incubating)</h1>
+      <h2 class="project-tagline">Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.</h2>
+      
+        <a href="https://github.com/apache/incubator-dubbo" class="btn">View on GitHub</a>
+      
+      
+    </section>
+
+    <section class="main-content">
+      
+
+
+      <footer class="site-footer">
+          <span class="site-footer-credits">Copyright © 2018 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</span>
+      </footer>
+    </section>
+
+    
+      <script type="text/javascript">
+        (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-112489517-1', 'auto');
+        ga('send', 'pageview');
+      </script>
+    
+  </body>
+</html>
diff --git a/books/dubbo-dev-book-en/introduction.md b/books/dubbo-dev-book-en/introduction.md
new file mode 100644
index 00000000..e69de29b
diff --git a/books/dubbo-dev-book-en/release.html b/books/dubbo-dev-book-en/release.html
index c2ed7e2f..d15204f3 100644
--- a/books/dubbo-dev-book-en/release.html
+++ b/books/dubbo-dev-book-en/release.html
@@ -57,10 +57,10 @@
     <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
 
     
-    <link rel="next" href="contribution.md" />
+    <link rel="next" href="contribution.html" />
     
     
-    <link rel="prev" href="coding.md" />
+    <link rel="prev" href="coding.html" />
     
 
     </head>
@@ -115,9 +115,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.3" data-path="design.md">
+        <li class="chapter " data-level="1.3" data-path="design.html">
             
-                <span>
+                <a href="design.html">
             
                     
                     2 Architecture
@@ -141,9 +141,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.5" data-path="implementation.md">
+        <li class="chapter " data-level="1.5" data-path="implementation.html">
             
-                <span>
+                <a href="implementation.html">
             
                     
                     4 Init, Process, Protocols
@@ -511,9 +511,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7" data-path="contract.md">
+        <li class="chapter " data-level="1.7" data-path="contract.html">
             
-                <span>
+                <a href="contract.html">
             
                     
                     6 Contract
@@ -524,9 +524,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.8" data-path="coding.md">
+        <li class="chapter " data-level="1.8" data-path="coding.html">
             
-                <span>
+                <a href="coding.html">
             
                     
                     7 Code Style
@@ -550,9 +550,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.10" data-path="contribution.md">
+        <li class="chapter " data-level="1.10" data-path="contribution.html">
             
-                <span>
+                <a href="contribution.html">
             
                     
                     10 Contribution
@@ -563,9 +563,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.11" data-path="checklist.md">
+        <li class="chapter " data-level="1.11" data-path="checklist.html">
             
-                <span>
+                <a href="checklist.html">
             
                     
                     11 Checklist
@@ -706,12 +706,12 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
 
             
                 
-                <a href="coding.md" class="navigation navigation-prev " aria-label="Previous page: 7 Code Style">
+                <a href="coding.html" class="navigation navigation-prev " aria-label="Previous page: 7 Code Style">
                     <i class="fa fa-angle-left"></i>
                 </a>
                 
                 
-                <a href="contribution.md" class="navigation navigation-next " aria-label="Next page: 10 Contribution">
+                <a href="contribution.html" class="navigation navigation-next " aria-label="Next page: 10 Contribution">
                     <i class="fa fa-angle-right"></i>
                 </a>
                 
@@ -722,7 +722,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"9 Versions","level":"1.9","depth":1,"next":{"title":"10 Contribution","level":"1.10","depth":1,"path":"contribution.md","ref":"./contribution.md","articles":[]},"previous":{"title":"7 Code Style","level":"1.8","depth":1,"path":"coding.md","ref":"./coding.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"release.md","mtime":"2017-12-26T02:28:23.732Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:36.596Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"9 Versions","level":"1.9","depth":1,"next":{"title":"10 Contribution","level":"1.10","depth":1,"path":"contribution.md","ref":"./contribution.md","articles":[]},"previous":{"title":"7 Code Style","level":"1.8","depth":1,"path":"coding.md","ref":"./coding.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"release.md","mtime":"2018-03-19T06:46:50.851Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:21.618Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book-en/search_index.json b/books/dubbo-dev-book-en/search_index.json
index de1bec78..3d7f0107 100644
--- a/books/dubbo-dev-book-en/search_index.json
+++ b/books/dubbo-dev-book-en/search_index.json
@@ -1 +1 @@
-{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["book","build,","code","cover","design","dev","dubbo","dubbo,","etc..","extension,","follow","introduct","mainli","principl","styles,","topics:","versio,"],"build.html":["${home}/.m2/repository,","1","1.","1.5","2","2.","2.2.1",">","abov","appli","befor","below","branch","build","building:","c:\\document","check","checkout","classpath","clean","click","clone","code","code.","comand:","command","command,","command:","configur","debug","declipse.workspace=/path/to/the/workspace/","demands:","dev,","dmaven.test.skip","dubbo","eclips","eclipse.","eclipse:configur","eclipse:eclips","environ","export","first,","gener","git","https://github.com/alibaba/dubbo","https://github.com/alibaba/dubbo/tags.","id","ide.","idea","idea:idea","import","instal","intellij","jar","java","lastest","local","m2_repo","mainten","major","master","maven","maven_opts=","maven_optsshould","mvn","need","packag","path","poit","prefer","project","release.","repositori","repository。","settings\\.m2\\repositori","skip","sourc","source:jar","support","tag","test","through","tool.","under","unix","us","variabl","version","via","view","well:","window","workspac","xmx1024m","xx:maxpermsize=512m","↩"],"SPI.html":["\"consumer\"","\"provider\"","\"provider\",","\"transport\"})","\"xxx\")","'s","(contain","(wheel",",",",but",",it",",we",".","...","...);","//","//...","//after","1.","1,place","2.","2:","3","=","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"server\",","abov","accquir","acitiv","act","activ","activated,for","activation,like:","ad","adapt","adaptive.","adaptive,th","add","annot","anoth","aop","aop,","appointment:","as:filter,","attribut","attribute)","auto","automat","below","bind(),adapt","bind(url","bring","bu","cache=\"lru\",auto","cachefilter。","cann't","car","carmak","carmaker、wheelmak","carmaker(car","cause.","channelhandl","chapter:","choos","chooses.","class","class,you","class.","classpath","class。","class。extensionload","class,us","client","code","codes:","collect","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.protocol;","com.alibaba.xxx;","condit","config","configur","configuration.","connect(url","contain","content","content:","copi","creat","definition.","demo,","demo:two","depen","depenc","depend","determin","dubbo","dynam","easili","enhanc","ensur","entiti","error","etc,multi","exampl","example:","example:standard","except","execut","executed.","executed,th","exist","explain","exportlistener,","extend","extens","extensionload","extern","fail","failed.for","featur","file","filenam","file,dubbo","file,not","file:meta","filter","firstli","fix","fixed,get","follow","for.","found","fulli","function","getname().","good","handler)","here","holder","impl","impl.refer();","impl;","implemenet","implement","implementation,","implementation.","implementation。it","implementation。th","implementation,if","implementation:","import","inf/dubbo/com.alibaba.dubbo.rpc.protocol,content:","inf/dubbo/ful","info","inform","information.","inherit","inject","instanc","instance,wrapp","instant","instructor","intefac","interfac","interface)","interface,but","invoc","invok","invokerlistener,","ioc","issu","it.","jar","jdk","jruby.jar","key","key.。such","key,if","know","known","labels,w","like:","line","load","logic","look","lost.","make","makecar()","makecar();","makecar(url","maker)","maker)、wheelmak","makewheel","makewheel();","makewheel(url","mani","member","merg","meta","method","missing,and","modul","module,al","more","move","multi","multipl","name","name,if","name.","name=th","name,fil","need","needed,","need。","never","new","note:spi","note:th","object","ofadapt","on","once.","oper","or:","outer","packag","paramet","parameter(or","paramtyp","pass","pattern(pleas","pattern:spi","point","powerful.","predefin","program","protocol","protocol)","protocol;","protocol,place","provid","provider,group","proxi","public","qualifi","question","question:how","racecar","racecar(wheel,","racecarmak","real","refer()","regard","relat","releas","remotingexception;","repres","resourc","return","rubi","ruby,","rubyscriptengin","safeti","same","scan","script","scriptengine,get","search","seper","server","setter","setter.","setwheelmaker(wheelmak","simpli","simplifi","singleton","source:","specif","spi","spi'","spi(servic","spi,","spi.","spi.extensionload","spis,","spis。newli","spi。a","spi。get","spi,dubbo","spi:","standard","statuscheck","such","support","tell","telnethandler,","text","this.wheelmak","thread","through","throw","time.","timecost","togeth","transport","type","type,extensionload","until","url","url)","url);","url,","url.get(\"wheel.type\")","url.url","url,aft","url,dynam","us","used.","user","valid","valu","value)","value,th","void","wast","way","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","whenextensionload","work","wrap","wrapper","xxx","xxx=com.alibaba.xxx.xxxprotocol","xxxfilter","xxxprotocol","xxxprotocol(protocol","xxxprotocolwrapp","{","}","↩","。the","),cach",",one",",setwheelmak",",the",",to"],"impls/introduction.html":["5","contributor","dubbo","extend","extens","functionality.","implement","integration,","interfac","it'","spi","system","us"],"impls/protocol.html":["(export","(invok","(plain","(protocol","*","*/","...","/**","//","1.","2.","3.","5.1",">","@param","@return","@throw","`export()`","`invoke()`","`invoker`","`refer()`","`refer()`.","abstract","abstractexport","abstractinvok","address","associ","busi","call","call,","call.","cancel","care","check=fals","class","com","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.xxx;","communication.","configur","connect","content:","contract:","convert","correspondingli","detail","directori","doinvoke(invoc","dubbo","dure","e.g.","effect","error","except","execut","exist","export","export()","export(invok","export,","export.","exporter,","extend","extens","fails.","file","framework","framework,","gener","get","guid","hide","idempotent,","implement","implementation)","implementation,","implementation.","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","info","instance.","interfac","interface.","introduc","invocation)","invok","invoke()","invoker)","ipc,","is,","it'","it.","it:","java","layer","layout:","local","logic","main","meta","method","more","moreover,","need","network","new","notes:","object","occupi","once.","others.","packag","pass","port","protect","protocol","protocol'","protocol,","provid","proxi","public","receiv","recov","refer","refer()","refer().","refer(class","remot","remotingexception{","request","requir","resourc","respons","return","rpc","rpccontext.getcontext().setremoteaddress();","rpcexcept","rpcexception;","same","save","send","servic","service'","service:","set","sharing,","side","speaking,","src","summari","super(invoker);","super(type,","super.unexport();","tcp","text","there'","throw","throwabl","tri","type","type,","unexport()","upper","url","url)","url);","url,","url.","us","user","void","which'","xxx","xxx=com.xxx.xxxprotocol","xxx=com.xxx.xxxprotocol)","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxprotocol","xxxprotocol.java","xxxprotocol.java:","{","|","}"],"impls/filter.html":["(filter","(plain","...","//","5.2","=","aaa,","accumul","added.","base","bbb","befor","both","built","chang","class","com","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","consid","consumer,","content:","contract:","correspond","count","default","default\"","default.","defin","delete.","directori","dubbo","example,","example:","exclu","exclud","execut","exist","extens","extension.","file","filter","filter,","filter.","filter=\"","filter=\"xxx,default,yyy\",","filters.","foo1","foo1\"","function","furthermore,","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.filter:","instead","intercept","interfac","introduc","invoc","invocation)","invoke(invok","invoked,","invoker,","invoker.invoke(invocation);","java","layout:","location.","main","mean","mechanism.","meta","method","moment,","more","order","override,","packag","penalti","provid","public","remot","repres","resourc","result","result;","return","rpcexcept","same","servic","special","src","summari","text","throw","time","togeth","too,","use:","user","valu","xxx","xxx=com.xxx.xxxfilt","xxx=com.xxx.xxxfilter)","xxxfilter","xxxfilter.java","xxxfilter.java:","yyi","yyy,","{","|","}",",xxx,"],"impls/invoker-listener.html":["(invokerlisten","(plain","...","//","5.3","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","destroyed(invok","directori","dubbo","event","exist","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","interfac","invoker)","invokerlisten","java","layout:","main","meta","packag","public","referenced.","referred(invok","resourc","rpcexcept","servic","src","summari","text","there'","throw","void","xxx","xxx=com.xxx.xxxinvokerlisten","xxx=com.xxx.xxxinvokerlistener)","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","{","|","}"],"impls/exporter-listener.html":["(exporterlisten","(plain","...","//","5.4","class","com","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","directori","dubbo","event","exist","exported(export","exported.","exporter)","exporterlisten","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","interfac","java","layout:","main","meta","packag","public","resourc","rpcexcept","servic","src","summari","text","there'","throw","unexported(export","void","xxx","xxx=com.xxx.xxxexporterlisten","xxx=com.xxx.xxxexporterlistener)","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","{","|","}"],"impls/cluster.html":["(cluster","(plain","...","//","5.5",">","abstractclusterinvoker(directory)","class","cluster","cluster,","com","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","directori","directory)","doinvoke(invoc","dubbo","exist","extens","file","group","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","interfac","invocation,","invok","invokers,","java","layout:","list>","loadbal","loadbalance)","main","merge(directori","meta","new","on","packag","provid","provider.","public","resourc","result","return","rpcexcept","servic","singl","src","summari","text","throw","treat","xxx","xxx=com.xxx.xxxclust","xxx=com.xxx.xxxcluster)","xxxcluster","xxxcluster.java","xxxcluster.java:","{","|","}","};"],"impls/router.html":["(loadbal","(plain","...","//","5.6","class","com","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","content:","directori","dubbo","exist","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","interfac","invoc","invocation)","invocation.","invokers,","java","layout:","list>","main","meta","on","packag","pick","provid","public","resourc","router","routerfactori","rpcexcept","select(list>","servic","src","summari","text","throw","xxx","xxx=com.xxx.xxxrouterfactori","xxx=com.xxx.xxxrouterfactory)","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","{","|","}"],"impls/load-balance.html":["(loadbal","(plain","...","//","5.7",">","class","com","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","interfac","invoc","invocation)","invocation.","invok","invokers,","java","layout:","loadbal","main","meta","on","packag","pick","provid","public","resourc","rpcexcept","select(list>","servic","src","summari","text","throw","xxx","xxx=com.xxx.xxxloadbal","xxx=com.xxx.xxxloadbalance)","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","{","|","}"],"impls/merger.html":["(merger","(plain","...","//","5.8","aggreg","class","com","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","group.","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","interfac","java","layout:","main","merg","merge(t...","merger","meta","packag","public","resourc","result","results)","return","src","strategi","summari","t","text","xxx","xxx=com.xxx.xxxmerg","xxx=com.xxx.xxxmerger)","xxxmerger","xxxmerger.java","xxxmerger.java:","{","|","}"],"impls/registry.html":["\"*\"","(plain","(registri","(registryfactori","(usual","(with","*","*/","...","/**","//","1.","2.","3.","4.","5.","5.9","6.","7.",">","@param","@return","@see","accident","address,","against","allow","allowed,","alway","author","automat","backup","backup=10.20.153.10","by,","cach","cancel","categor","categori","category.","category=overrid","center)","chang","check","check=fals","class","classifier,","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}.","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}.","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.xxx;","comma,","compar","configur","connect","consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","consumers,","contain","content:","contract","data","default","differ","directori","discovery.","disk","dubbo","dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","dynamic=fals","e.g.:","each","empti","empty,","equival","etc.","event","exact","except","exist","expir","extend","extens","extract","fails.","failur","file","file=registry.cach","fire","first","found,","full","getregistry(url","group,","guarante","guid","happens.","honor","ignor","ignored.","illegalstateexcept","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","info","info,nul","instead","interfac","interface,","interface=*&group=*&version=*&classifier=*","interface=com.alibaba.foo.barservice&version=1.0.0","interfaces,","isn't","java","jitter","kept","legal","list","list,","list.","listen","listener)","listener);","listener,","local","lookup","lookup(url","lost","main","match","mean","meta","mode","monitor","need","network","never","new","note","notif","notifi","notification.","notifications,","notify(list","notify:","notifylisten","notifylistener.java:","null","null,","on","once.","order,","otherwis","otherwise,","overrid","packag","paramet","part","partial","particluar","particular","persist","perspect","pls.","possibl","previou","procedur","protocol","providers,","providers.","public","pull","push","push,","queri","query,","queu","quit","reboot","receiv","recov","refer","regist","register(url","registr","registri","registryfactori","registryfactory.java:","registryservic","registryservice.java:","remov","requir","resourc","result","result.","retri","return","rout","same","say:","separ","seper","sequenc","server","server,","server:","servic","service,","service.","service:","session","session=60000","set","set)","set,","set.","setup","simpli","singl","special","specifi","specified.","src","structure:","subscrib","subscribe(url","subscript","subscription,","summari","support","suppos","text","thread","thrown","time,","timeout","timeout=1000","toler","type","type,","type.","under","unregist","unregister(url","unsubscrib","unsubscribe(url","unsubscription,","until","upcom","uri","url","url)","url);","url,","url.","urls);","us","user","username:password","version","version,","versioning,","void","way,","which'","whole","wildcard","xxx","xxx=com.xxx.xxxregistryfactori","xxx=com.xxx.xxxregistryfactory)","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","{","{@link","|","}","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","订阅服务."],"impls/monitor.html":["(monitor","(monitorfactori","(plain","...","//","5.10","class","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.xxx;","configur","count(url","directori","dubbo","each","exist","extens","file","format:","getmonitor(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","interfac","invoc","invocation.","java","layout:","main","meta","monitor","monitorfactori","new","packag","public","resourc","return","servic","src","statistics)","summari","taken","text","time","url)","void","xxx","xxx=com.xxx.xxxmonitorfactori","xxx=com.xxx.xxxmonitorfactory)","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","{","|","}"],"impls/extension-factory.html":["(extensionfactori","(plain","...","//","5.11","class","com","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.xxx;","configur","content:","directori","dubbo","exist","extens","extensionfactori","extensions.","factori","file","getextension(class","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","interfac","java","layout:","load","main","meta","name)","object","packag","public","resourc","src","string","summari","text","type,","xxx","xxx=com.xxx.xxxextensionfactori","xxx=com.xxx.xxxextensionfactory)","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","{","|","}"],"impls/proxy-factory.html":["(plain","(proxyfactori","...","//","5.12",">","busi","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","convert","directori","dubbo","exist","extens","file","getinvoker(t","getproxy(invok","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","interfac","interface.","invok","invoker)","java","layout:","main","meta","packag","proxy,","proxyfactori","public","resourc","rpcexcept","src","summari","t","text","throw","type,","url","url)","xxx","xxx=com.xxx.xxxproxyfactori","xxx=com.xxx.xxxproxyfactory)","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","{","|","}"],"impls/compiler.html":["(compil","(plain","...","//","5.13","automat","byte","class","code","com","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.xxx;","compil","compiler,","configur","content:","directori","discov","dubbo","dynam","exist","extens","file","gener","getextension(class","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","interfac","invocation.","java","layout:","loaded.","main","meta","name)","object","packag","public","required,","resourc","rpc","src","string","summari","text","type,","us","xxx","xxx=com.xxx.xxxcompil","xxx=com.xxx.xxxcompiler)","xxxcompil","xxxcompiler.java","xxxcompiler.java:","{","|","}"],"impls/dispatcher.html":["(dispatch","(plain","...","//","5.14",">","class","com","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.xxx;","configur","content:","directori","dispatch","dubbo","exist","extens","file","group","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","interfac","java","layout:","lookup(url","main","meta","packag","pool","public","resourc","src","strategy.","summari","text","thread","url)","xxx","xxx=com.xxx.xxxdispatch","xxx=com.xxx.xxxdispatcher)","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","{","|","}"],"impls/threadpool.html":["(plain","(threadpool","...","//","5.15",">","busi","class","com","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.xxx;","configur","content:","directori","dubbo","execut","executor","exist","extens","file","getexecutor()","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","interfac","java","java.util.concurrent.executor;","layout:","logic","main","meta","need","on","packag","pool","provider.","public","receiv","request,","resourc","server","servic","src","strategi","summari","text","thread","threadpool","xxx","xxx=com.xxx.xxxthreadpool","xxx=com.xxx.xxxthreadpool)","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","{","|","}"],"impls/serialize.html":["(objectinput","(objectoutput","(plain","(serial","5.16",">","byte","class","code","com","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.xxx;","configur","content:","deserialize(paramet","directori","dubbo","exist","extens","file","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","input)","inputstream","interfac","ioexcept","java","layout:","main","meta","network,","new","object","objectinput","objectoutput","output)","outputstream","packag","parameters,","public","resourc","return","serial","serialize(paramet","src","stream","summari","text","throw","transport","versa.","vise","xxx","xxx=com.xxx.xxxseri","xxx=com.xxx.xxxserialization)","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxserial","xxxserialization.java","xxxserialization.java:","{","|","}"],"impls/remoting.html":["(client","(plain","(server","(transport","...","//","5.17",">","abstractcli","abstractserv","between","bind(url","channel","channelhandl","class","client","client.","collect","com","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.xxx;","commun","configur","connect(url","content:","directori","doclose()","doconnect()","doopen()","dubbo","exist","extend","extens","file","getchannel()","getchannel(inetsocketaddress","getchannels()","guid","handler)","handler);","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","interfac","java","layout:","main","meta","new","packag","protect","public","remot","remoteaddress)","remotingexcept","remotingexception{","resourc","return","server","src","summari","super(url,","text","throw","throwabl","transport","url,","void","xxx","xxx=com.xxx.xxxtransport","xxx=com.xxx.xxxtransporter)","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","{","|","}"],"impls/exchanger.html":["(exchang","(exchangecli","(exchangeserv","(plain","...","//","5.18",">","between","bind(url","class","com","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.xxx;","configur","connect(url","content:","directori","dubbo","exchang","exchangecli","exchangehandl","exchangeserv","exist","extens","file","guid","handler)","handler);","impel","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","interfac","java","layer.","layout:","main","messag","meta","network","new","packag","public","remotingexcept","request","resourc","respons","return","src","summari","text","throw","transport","url,","xxx","xxx=com.xxx.xxxexchang","xxx=com.xxx.xxxexchanger)","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","{","|","}"],"impls/networker.html":["(network","(plain","...","//","5.19",">","class","com","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","group","grouping.","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","interfac","java","layout:","lookup(url","main","meta","network","packag","peer","public","resourc","src","summari","text","url)","xxx","xxx=com.xxx.xxxnetwork","xxx=com.xxx.xxxnetworker)","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","{","|","}"],"impls/telnet-handler.html":["(plain","(telnethandl","...","//","127.0.0.1","20880","5.20",">","@help(parameter=\"...\",","access","arg","channel,","class","com","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.xxx;","command.","configur","content:","convenience.","detail=\"...\")","directori","dubbo","dubbo>","exist","extens","file","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","interfac","java","layout:","main","message)","meta","oper","packag","public","remotingexcept","resourc","server","src","string","summari","summary=\"...\",","support","telnet","telnet(channel","telnethandl","text","throw","xxx","xxx=com.xxx.xxxtelnethandl","xxx=com.xxx.xxxtelnethandler)","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","{","|","}","用法"],"impls/status-checker.html":["(plain","(statuscheck","...","//","5.21",">","both","check","check()","checker","class","com","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.xxx;","command","configur","content:","depend","directori","dubbo","exist","extens","file","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","interfac","java","layout:","main","meta","on.","packag","page.","public","resourc","servic","src","statu","statuscheck","summari","telnet","text","us","xxx","xxx=com.xxx.xxxstatuscheck","xxx=com.xxx.xxxstatuschecker)","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","{","|","}"],"impls/container.html":["(contain","(plain","...","//","5.22","class","com","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.xxx;","configur","contain","content:","contents.","custom","directori","dubbo","exist","extens","extension,","file","guid","implement","implementation)","inf","inf/dubbo/com.alibaba.dubbo.container.container:","interfac","java","jetti","layout:","load","log4j","main","meta","packag","public","resourc","servic","spring","src","start()","statu","stop()","summari","text","us","xxx","xxx=com.xxx.xxxcontain","xxx=com.xxx.xxxcontainer)","xxxcontain","xxxcontainer.java","xxxcontainer.java:","{","|","}"],"impls/page.html":["(pagehandl","(plain","...","//","5.23",">","class","com","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","group","guid","handler","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","interfac","java","layout:","lookup(url","main","meta","packag","page","pagehandl","public","resourc","src","summari","text","url)","xxx","xxx=com.xxx.xxxpagehandl","xxx=com.xxx.xxxpagehandler)","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","{","|","}"],"impls/cache.html":["(cachefactori","(plain","...","//","5.24",">","cach","cache(url","cachefactori","class","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.xxx;","configur","contents:","directori","dubbo","exist","extens","file","get(object","getcache(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","interfac","java","key)","key,","key.","layout:","main","meta","name)","name);","new","object","packag","paramet","public","put(object","request","resourc","return","src","string","summari","text","url,","us","value)","value,","void","xxx","xxx=com.xxx.xxxcachefactori","xxx=com.xxx.xxxcachefactory)","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","{","|","}","没有配置cache属性时,使用此配置"],"impls/validation.html":["(plain","(valid","...","//","5.25",">","class","com","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.xxx;","configur","content:","directori","dubbo","except","exist","extens","file","getvalidator(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.validation.validation:","intefac","invocation)","java","layout:","main","meta","object","packag","paramet","public","resourc","src","summari","text","throw","url)","valid","validate(invoc","validation.","void","xxx","xxx=com.xxx.xxxvalid","xxx=com.xxx.xxxvalidation)","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","{","|","}"],"impls/logger-adapter.html":["(loggeradapt","(plain","...","//","5.26","adapt","class","com","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.xxx;","configur","content:","ddubbo:application.logger=xxx","directori","dubbo","exist","extens","file","getlogger(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","info(str","interfac","java","layout:","logger","loggeradapt","main","meta","msg)","or:","output","packag","public","resourc","src","summari","text","url)","void","xxx","xxx=com.xxx.xxxloggeradapt","xxx=com.xxx.xxxloggeradapter)","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","{","|","}"],"release.html":["(across","(onli","2.4.x,","2.4.x.","2.5.x","2.5.x,","2.5.x.","2.6.0","9","achiev","ad","add","affect","allow","alway","announc","appear,","appli","applic","applications:","balance.","base","befor","beta","branch","bring","bug","bugfix","bugfix,","call","choic","claus","compar","cost","creat","cycl","desir","develop","dubbo","e.g.","enough","enough,","equal","evolv","experienc","experience,","fake","featur","features.","find","fix","fixed.","flat","follow","ga","good","here'","huge","immediately.","import","improv","increas","keep","larg","latest","librari","long","longer","main","maintained.","mainten","make","more","multipl","need","new","number","opportun","pattern","period","period.","pro","problem","problem,","product.","production.","projects,","promis","promot","proposition:","prove","quickli","reasons:","reduc","regular","release.","remain","respond","respons","result","risk.","risks.","same","seriou","significantli","span","stabil","stability,","stabl","stable:","student","such","sunset","suppos","sure","test","third","time","time,","time.","track","tri","trial","tripartit","two","upgrad","us","used.","user","version","version,","versions)","versions),","version,e.g.","version:high","version:low"],"code-smell.html":["\"dubbo\"))","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},firstli","\"script\"))","\"script\")).addparameter(\"type\",","#","$adp","()",",",",becaus",",if",",then",",tri",",you",".","1","1,","1.","12","2.","3,","3.","4.","5.",";","==",">provider,export","@adapt","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@extens","above,extensionload","accord","accquir","action.on","ad","adapt","address","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","address,y","address:","affact","again(if","annot","annotation.","annotation,get","anoth","arg1,","arg2);","async","attachments.","attent","attribut","attributes(us","auto","avail","available,","avoid","a,shar","b","bad","between","busi","call","callback","car","case","case.","check","choos","choosen","choosen(if","class","client","close","code","codec","collision.","com.alibaba.dubbo.xxx.yyyinvokerwrapp","config","configed,","configur","confirm","connect","connection,","connections.","connecton","connectons.","consum","contain","convert","count","creat","current","data","data)","data,","default","defin","defines.","design","destroy","destroyed,","destroyed.","details:","details:paramet","details:when","determin","differ","directli","disabl","do","done","dubbo","dubbocodec","dubboprotocol","each","enabled。","establish","event","exampl","except","exchang","execut","exist","existing,do","export","export(dubbo://provid","export(registry://registri","export:","extens","extension\");","extensionload","feather","features,","file","file:","first),jud","first,","found","full","function","gener","get","getregistry(dubbo://registri","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","group","hand","hand,","here.","id","if(method","if(paramet","if(url","illegalargumentexception(\"url","illegalstateexception(\"fail","illegalstateexception。if","implement","implementation,","implementation.","implementations.","implementation。if","init","inject","injected.","inner","inov","instanc","instance(proxy)","interfac","invoc","invocatiion.","invocatioin.","invocation.","invocation,if","invok","invoked,","invoker'","it.","judg","jvm","key","key1","key2","key2,if","last","lazi","list","list(not","load","loadbal","logic","logic.","look","lost","lower","main","mani","mean","mehod","method","method!\");","method)","method,","method,judg","more","multi","name","name.","name;if","need","needed,","needed.","new","next","notif","notifi","notify(dubbo://provid","notify(route://registri","null\");","null)","object","on","one),avoid","onreturn","onreturn/onerror...","open","optimized.","order","packag","paramet","pass","path","pay","persist","point","point,","polici","policy,invoc","provid","providers,firstli","proxi","public","push","put","read(file))","real","record","reduc","refer","refer(dubbo://provid","refer(registry://registri","refer:","register(dubbo://provid","registri","registry:","releas","remain","rescan","resend","result.","retri","return","revers","right","rout","routers:","rule","rule:","run(url","same","select","send","sent","seper","server","server,","servi","servic","services,jvm","set","share","side","side.","side,provid","smell","specif","spi","spi,","stage","stage.。when","staticmap,it","sticki","store","strategi","string","string[]","subscrib","subscribe(dubbo://registri","suffix(file)).addparameter(\"rule\",","support","tcp","theori","those","throw","timeout","token","transmision.","transmit","transmition,","type1","type2","type?)","ugli","unsupportedoperationexception(\"i","up","url","url)","url,","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","url,but","url,default","us","usag","usage:","used。for","useless","valu","verifi","version","whether","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","}","。if",",string[]",":"],"TCK.html":["(technolog","13","acceler","access","add","alreadi","altern","alway","anyon","applic","balanc","build","case","cdi","commun","communication,","community.","compat","complet","contract","core","differ","draw","dubbo","dubbo'","dubbo.","effect","ensur","extenders,","extens","facilit","final/html/introduction.html","first,","framework","health","idea","implement","implementaion,","implementation.","improv","interest","jboss","kit)","load","matur","need","new","offer","open","our","overal","part.","parti","point","points.","preliminari","protocol","protocol,","realiz","reference:http://docs.jboss.org/cdi/tck/reference/1.0.1","registri","registry,","rest","satisfi","scattered.","scenario","serialization,","sourc","spi","strategi","tck","tck.","test","third","thu","todo","together.","uncertain","us","user","veri","welcom","whether","work","xingzhi"]},"length":33},"tokenStore":{"root":{"1":{"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"code-smell.html":{"ref":"code-smell.html","tf":3.333333333333333}}},"3":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5}}},"docs":{"build.html":{"ref":"build.html","tf":5},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"5":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}},",":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"2":{"0":{"8":{"8":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"docs":{}},"docs":{}},"docs":{}},"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}},".":{"2":{"docs":{},".":{"1":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"docs":{}}},"4":{"docs":{},".":{"docs":{},"x":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"5":{"docs":{},".":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"6":{"docs":{},".":{"0":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"docs":{}}},"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"3":{"docs":{"SPI.html":{"ref":"SPI.html","tf":3.333333333333333}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"4":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"5":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.333333333333333}},".":{"1":{"0":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":5}}},"1":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5}}},"2":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5}}},"3":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5}}},"4":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5}}},"5":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5}}},"6":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":5}}},"7":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":5}}},"8":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5}}},"9":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":5}}},"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":5}}},"2":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":5}}},"1":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5}}},"2":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":5}}},"3":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5}}},"4":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":5}}},"5":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":5}}},"6":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5}}},"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":5}}},"3":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5}}},"4":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5}}},"5":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":5}}},"6":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5}}},"7":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5}}},"8":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5}}},"9":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":5}}},"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"6":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"7":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"9":{"docs":{"release.html":{"ref":"release.html","tf":5}}},"docs":{},"b":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.11764705882352941}}}},"t":{"docs":{},"h":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":5.050955414012739},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},",":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}},"s":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"g":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"e":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"impls/filter.html":{"ref":"impls/filter.html","tf":0.015625},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.044585987261146494},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}},"t":{"docs":{},"w":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"a":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"c":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"e":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"b":{"docs":{},"b":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}},"y":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"t":{"docs":{},"e":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.058823529411764705},"build.html":{"ref":"build.html","tf":0.03184713375796178},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"code-smell.html":{"ref":"code-smell.html","tf":3.333333333333333}},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"s":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}}}},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},":":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}},".":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"u":{"docs":{},"n":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},"t":{"docs":{},"y":{"docs":{},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776}}},"y":{"docs":{},";":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436}},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"2":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}},"docs":{}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},".":{"docs":{},"j":{"docs":{},"d":{"docs":{},"k":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666}}},"y":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"c":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"x":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198}}},"y":{"docs":{},";":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},".":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}},"p":{"docs":{},"c":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}},".":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"r":{"docs":{},"o":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357}}},"y":{"docs":{},";":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}},";":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"#":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"}":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"#":{"docs":{},"l":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},"}":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"y":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},".":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}},"r":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905}}},"y":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.02912621359223301}}}},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5.024096385542169}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.011889035667107},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"u":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"r":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"code-smell.html":{"ref":"code-smell.html","tf":0.02242152466367713}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"o":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/container.html":{"ref":"impls/container.html","tf":5.035714285714286},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"s":{"docs":{},".":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"n":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}},"u":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}},"i":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}}}}}}}}},"e":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}},"s":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},":":{"docs":{},"\\":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}}}},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}},"(":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}},"e":{"docs":{},"r":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697}}}}}}},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}},"g":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"(":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"i":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017173051519154558},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},",":{"docs":{},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},",":{"docs":{},"u":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"s":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":5.017857142857143}},",":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/cache.html":{"ref":"impls/cache.html","tf":5.033333333333333}},"e":{"docs":{},"=":{"docs":{},"\"":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"\"":{"docs":{},",":{"docs":{},"a":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}},"n":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.009247027741083224}},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"e":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"l":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.008968609865470852}}}}}}}},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872}}},"y":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"=":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"y":{"docs":{},"c":{"docs":{},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"d":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.058823529411764705},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}},"v":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"p":{"docs":{"release.html":{"ref":"release.html","tf":0.014492753623188406}}}}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"e":{"docs":{},".":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},"o":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},":":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.026041666666666668},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266}},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}}},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}},"s":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.058823529411764705},"build.html":{"ref":"build.html","tf":0.025477707006369428},"SPI.html":{"ref":"SPI.html","tf":0.011889035667107},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.125},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},",":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},">":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}},"'":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"r":{"docs":{},"e":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"m":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}}}}}}}}}}}}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"i":{"docs":{},"c":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"y":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}},"l":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5.04054054054054}}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}},"o":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}}},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}}},"n":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.01300578034682081},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},".":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}}},",":{"docs":{},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.458333333333333},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/filter.html":{"ref":"impls/filter.html","tf":0.041666666666666664},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.05813953488372093},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.05813953488372093},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.044642857142857144},"impls/router.html":{"ref":"impls/router.html","tf":0.04938271604938271},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.05952380952380952},"impls/merger.html":{"ref":"impls/merger.html","tf":0.06756756756756757},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.05714285714285714},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.06944444444444445},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.054945054945054944},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.07228915662650602},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.06756756756756757},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.06896551724137931},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.05357142857142857},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.027906976744186046},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.08333333333333333},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.06060606060606061},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.06896551724137931},"impls/container.html":{"ref":"impls/container.html","tf":0.05952380952380952},"impls/page.html":{"ref":"impls/page.html","tf":0.08333333333333333},"impls/cache.html":{"ref":"impls/cache.html","tf":0.041666666666666664},"impls/validation.html":{"ref":"impls/validation.html","tf":0.061224489795918366},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05825242718446602},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.058823529411764705},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.009247027741083224},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}}},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5.027777777777778}}}}}}}}},"s":{"docs":{},".":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"r":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"code-smell.html":{"ref":"code-smell.html","tf":0.008968609865470852}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5.023255813953488}}}}}}}}},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}},".":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"l":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"i":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"e":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.015625}}}}}}},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"l":{"docs":{},"u":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"d":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5.0227272727272725},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0066050198150594455},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"o":{"docs":{},"r":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}},"e":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}},"n":{"docs":{},"v":{"docs":{},"i":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"release.html":{"ref":"release.html","tf":0.014492753623188406}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"i":{"docs":{},"l":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"c":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}},".":{"docs":{},"g":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"release.html":{"ref":"release.html","tf":0.004830917874396135}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.011560693641618497}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"a":{"docs":{},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"h":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"./":{"ref":"./","tf":0.058823529411764705},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"r":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"o":{"1":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}},"docs":{}}},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"l":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},")":{"docs":{},",":{"docs":{},"j":{"docs":{},"u":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"e":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"l":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0066050198150594455},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"=":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/filter.html":{"ref":"impls/filter.html","tf":5.052083333333333}},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"=":{"docs":{},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}}}}}}}},"x":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.00966183574879227}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"n":{"docs":{},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"s":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"u":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}},"i":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"k":{"docs":{},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.033816425120772944}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}}}}}}}}}}}}}},"r":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"t":{"docs":{"./":{"ref":"./","tf":10}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"j":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.011889035667107},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"e":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"*":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707}}},"n":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"e":{"docs":{},",":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},"(":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"f":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},",":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"r":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},",":{"docs":{},"n":{"docs":{},"u":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}},",":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}},".":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"i":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.030373831775700934},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5.023255813953488}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}},"'":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"d":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"i":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"o":{"docs":{},"v":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},":":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.026041666666666668},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.07142857142857142},"impls/router.html":{"ref":"impls/router.html","tf":0.04938271604938271},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.047619047619047616},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556}}}},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.026420079260237782},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.016355140186915886},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"code-smell.html":{"ref":"code-smell.html","tf":0.02092675635276532},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"。":{"docs":{},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"m":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}}}},"o":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856}}}}}}}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"t":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"'":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"p":{"docs":{},"c":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"。":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"(":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"m":{"2":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}},"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"l":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.03184713375796178}},"_":{"docs":{},"o":{"docs":{},"p":{"docs":{},"t":{"docs":{},"s":{"docs":{},"=":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},")":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}},"n":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"u":{"docs":{},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"v":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.03821656050955414}}}},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"r":{"docs":{},"g":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"t":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5.027027027027027}}}}}},"t":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.014018691588785047},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{},"j":{"docs":{},"u":{"docs":{},"d":{"docs":{},"g":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"s":{"docs":{},"m":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"e":{"docs":{},",":{"docs":{},"a":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"r":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}},"v":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":5.038095238095238}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"p":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.00966183574879227}}}}}}}},"s":{"docs":{},"g":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}}}}}}},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}},"v":{"docs":{},"i":{"docs":{},"o":{"docs":{},"u":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}},"o":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}},"s":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":5.02803738317757},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.023255813953488372}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},".":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}}},"x":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"y":{"docs":{},",":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5.021978021978022}}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"o":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"t":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"(":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},":":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"s":{"docs":{},",":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"u":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}}},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"s":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"g":{"docs":{},"e":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776}},".":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5.013888888888889}}}}}}}}},"y":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"o":{"docs":{},"i":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"n":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"s":{"docs":{},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"b":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"o":{"docs":{},"l":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}},"y":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.023778071334214},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02102803738317757},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.026785714285714284},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.046511627906976744},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.03571428571428571},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.05},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05102040816326531},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.04854368932038835},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}}}}}},"l":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"s":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"i":{"docs":{},"o":{"docs":{},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"e":{"docs":{},"r":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}},"l":{"docs":{},"s":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}}}}}}},"t":{"docs":{},"u":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.05747126436781609},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5.022988505747127}}}}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}},"c":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},",":{"docs":{},"i":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"b":{"docs":{},"i":{"docs":{},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454}},"e":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"g":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},".":{"docs":{},"。":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"y":{"docs":{},".":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"[":{"docs":{},"]":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}},"o":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}},"r":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}}}},"e":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"\\":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"\\":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}},"docs":{}}}}}}}},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}}}}}}}}},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"u":{"docs":{},"p":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02102803738317757},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"code-smell.html":{"ref":"code-smell.html","tf":0.02242152466367713}},"e":{"docs":{},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248}}},"s":{"docs":{},",":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":5.026785714285714}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"n":{"docs":{},"d":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},">":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"=":{"6":{"0":{"0":{"0":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"build.html":{"ref":"build.html","tf":0.03821656050955414},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"e":{"docs":{},":":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"s":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"y":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}},"b":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}},"n":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"r":{"docs":{},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"m":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}}}},"v":{"docs":{},"e":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"y":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"t":{"docs":{},"i":{"docs":{},"s":{"docs":{},"f":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"f":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"d":{"docs":{},"e":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"g":{"docs":{},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"a":{"docs":{},"l":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"a":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}}}},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":3.3782474680757373},"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.458333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.02242152466367713},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"'":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"。":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"l":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"。":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"a":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}}}}}}},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"r":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}},"m":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":3.334828101644245}}}}}}},"t":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}}}}}},"o":{"docs":{},"l":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"d":{"docs":{},"o":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}}}}},"a":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"release.html":{"ref":"release.html","tf":0.00966183574879227},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}}}},"l":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.030303030303030304},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":5.02020202020202}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}},"x":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04186046511627907},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.023255813953488372}}}}},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.034482758620689655}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5.022988505747127}}}}}}}}}},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}},"r":{"docs":{},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"u":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"release.html":{"ref":"release.html","tf":0.004830917874396135}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"c":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"=":{"1":{"0":{"0":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"release.html":{"ref":"release.html","tf":0.014492753623188406}},"a":{"docs":{},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"?":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"c":{"docs":{},"p":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"k":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5.058252427184466}},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"w":{"docs":{},"o":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.058823529411764705}}},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":5.053140096618358},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.028985507246376812}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"s":{"docs":{},")":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},",":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},":":{"docs":{},"h":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}},"a":{"docs":{},".":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"f":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/validation.html":{"ref":"impls/validation.html","tf":5.030612244897959}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},"e":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"i":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}},"e":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"s":{"docs":{},"e":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/registry.html":{"ref":"impls/registry.html","tf":0.01300578034682081},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.023255813953488372},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},"$":{"docs":{},"{":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"}":{"docs":{},"/":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}},"docs":{}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},">":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}},"a":{"docs":{},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"e":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"release.html":{"ref":"release.html","tf":0.004830917874396135}},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"c":{"docs":{},"c":{"docs":{},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}}}}}},"u":{"docs":{},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"l":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"h":{"docs":{},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"?":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"&":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"&":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"y":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}},"n":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"o":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"y":{"docs":{},"o":{"docs":{},"n":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"o":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"s":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"e":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"s":{"docs":{},"(":{"docs":{},"u":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}},"h":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"a":{"docs":{},"a":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}},"g":{"docs":{},"g":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"(":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.011560693641618497},"release.html":{"ref":"release.html","tf":0.004830917874396135}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606}}}}}}}},"w":{"docs":{},"a":{"docs":{},"y":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"r":{"docs":{},"g":{"1":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"2":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},",":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},".":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}},"a":{"docs":{"release.html":{"ref":"release.html","tf":0.03864734299516908}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}}}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"'":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"a":{"docs":{},"l":{"docs":{},"t":{"docs":{},"h":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"u":{"docs":{},"g":{"docs":{},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.007926023778071334}}},"v":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},".":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556}}}},"r":{"docs":{},"u":{"docs":{},"b":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"u":{"docs":{},"d":{"docs":{},"g":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"v":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},"b":{"docs":{},"e":{"docs":{},"l":{"docs":{},"s":{"docs":{},",":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},".":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}},"r":{"docs":{},"g":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"z":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.019815059445178335},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5.023809523809524},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}},"g":{"4":{"docs":{},"j":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}},"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.02912621359223301}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5.019417475728155}}}}}}}}}}},"o":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"u":{"docs":{},"p":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"n":{"docs":{},"g":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}},"e":{"docs":{},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}}}}},"n":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},">":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"e":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},"(":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"b":{"docs":{},"r":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"e":{"docs":{},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"n":{"docs":{},"e":{"docs":{},"e":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.008968609865470852},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"release.html":{"ref":"release.html","tf":0.03864734299516908},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}}},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":5.041666666666667}},",":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}},"x":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"=":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},")":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666}},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}},";":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},":":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"s":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"i":{"docs":{},"f":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"release.html":{"ref":"release.html","tf":0.00966183574879227}}}}}}},"a":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"y":{"docs":{},"。":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"a":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"i":{"docs":{},"z":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"d":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266}},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}},":":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"c":{"docs":{},"d":{"docs":{},"i":{"docs":{},"/":{"docs":{},"t":{"docs":{},"c":{"docs":{},"k":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"1":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"g":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":5.01878612716763},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}}},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"u":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.018691588785046728},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/remoting.html":{"ref":"impls/remoting.html","tf":5}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"{":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}},"v":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.015625},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"release.html":{"ref":"release.html","tf":0.004830917874396135}},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"s":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.014018691588785047},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"v":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}},"o":{"docs":{},"v":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"r":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},",":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}},"i":{"docs":{},"r":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"y":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"n":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"p":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"e":{"docs":{},"r":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5.012345679012346}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}},"s":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}},"i":{"docs":{},"s":{"docs":{},"k":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}},"s":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"i":{"docs":{},"x":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"SPI.html":{"ref":"SPI.html","tf":0.007926023778071334},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.125},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.017937219730941704},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"。":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.00966183574879227},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"a":{"docs":{},"g":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/registry.html":{"ref":"impls/registry.html","tf":0.024566473988439308},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"a":{"docs":{},"f":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"d":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.03864734299516908}}}}}}},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"w":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},"l":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":3.333333333333333},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"y":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112}},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"i":{"docs":{},"c":{"docs":{},"h":{"docs":{},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.01453104359313078}}}}}}}}},"x":{"docs":{},"m":{"docs":{},"x":{"1":{"0":{"2":{"4":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"x":{"docs":{},":":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"=":{"5":{"1":{"2":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}},"x":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"y":{"docs":{},")":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}},"y":{"docs":{},")":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},"y":{"docs":{},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}},"y":{"docs":{},")":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}},"y":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"(":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"z":{"docs":{},"h":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},"↩":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"\"":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"*":{"docs":{},"\"":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"2":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"n":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}},"a":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"u":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"w":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015852047556142668},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.037209302325581395},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.025},"impls/validation.html":{"ref":"impls/validation.html","tf":0.030612244897959183},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.038834951456310676}},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}},"/":{"docs":{},"/":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.019815059445178335},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.037209302325581395},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.025},"impls/validation.html":{"ref":"impls/validation.html","tf":0.030612244897959183},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.038834951456310676}},".":{"docs":{},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"a":{"docs":{},"f":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"*":{"docs":{},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}}}}},"=":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"=":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"@":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/registry.html":{"ref":"impls/registry.html","tf":0.01300578034682081}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},".":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},"。":{"docs":{},"s":{"docs":{},"u":{"docs":{},"c":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}},"p":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"e":{"docs":{},"p":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"i":{"docs":{},"t":{"docs":{},")":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0066050198150594455},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},".":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}},"e":{"docs":{},")":{"docs":{},",":{"docs":{},"a":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"/":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"u":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"r":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"c":{"docs":{},"c":{"docs":{},"u":{"docs":{},"p":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"w":{"docs":{},"i":{"docs":{},"s":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}}}}}}},"a":{"docs":{},"l":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},":":{"docs":{},"h":{"docs":{},"o":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"y":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"u":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"i":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}},"{":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.023778071334214},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.018691588785046728},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.03571428571428571},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.06046511627906977},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.03571428571428571},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.05},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05102040816326531},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.04854368932038835},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"@":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},"\"":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{}}}},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},"}":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}},"}":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.023778071334214},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.026785714285714284},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.06976744186046512},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.03571428571428571},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.05},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05102040816326531},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.04854368932038835},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}},"。":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},")":{"docs":{},",":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},",":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"[":{"docs":{},"]":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.04439252336448598},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0968208092485549}},"/":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}}}},"`":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}},"r":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}},"|":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02570093457943925},"impls/filter.html":{"ref":"impls/filter.html","tf":0.046875},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.10465116279069768},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.10465116279069768},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.08035714285714286},"impls/router.html":{"ref":"impls/router.html","tf":0.1111111111111111},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.10714285714285714},"impls/merger.html":{"ref":"impls/merger.html","tf":0.12162162162162163},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.09523809523809523},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.125},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.0989010989010989},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.10843373493975904},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.12162162162162163},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.10344827586206896},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.09821428571428571},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.05116279069767442},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.08333333333333333},"impls/networker.html":{"ref":"impls/networker.html","tf":0.125},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.09090909090909091},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.10344827586206896},"impls/container.html":{"ref":"impls/container.html","tf":0.10714285714285714},"impls/page.html":{"ref":"impls/page.html","tf":0.125},"impls/cache.html":{"ref":"impls/cache.html","tf":0.075},"impls/validation.html":{"ref":"impls/validation.html","tf":0.09183673469387756},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.08737864077669903}}},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"y":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"查":{"docs":{},"询":{"docs":{},"注":{"docs":{},"册":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"与":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"的":{"docs":{},"推":{"docs":{},"模":{"docs":{},"式":{"docs":{},"相":{"docs":{},"对":{"docs":{},"应":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"为":{"docs":{},"拉":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"只":{"docs":{},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"次":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"用":{"docs":{},"法":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}},"没":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}},"#":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}},"length":3185},"corpusTokens":["\"*\"","\"consumer\"","\"dubbo\"))","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},firstli","\"provider\"","\"provider\",","\"script\"))","\"script\")).addparameter(\"type\",","\"transport\"})","\"xxx\")","#","$adp","${home}/.m2/repository,","'s","()","(across","(cachefactori","(client","(cluster","(compil","(contain","(dispatch","(exchang","(exchangecli","(exchangeserv","(export","(exporterlisten","(extensionfactori","(filter","(invok","(invokerlisten","(loadbal","(loggeradapt","(merger","(monitor","(monitorfactori","(network","(objectinput","(objectoutput","(onli","(pagehandl","(plain","(protocol","(proxyfactori","(registri","(registryfactori","(serial","(server","(statuscheck","(technolog","(telnethandl","(threadpool","(transport","(usual","(valid","(wheel","(with","*","*/",",",",becaus",",but",",if",",it",",then",",tri",",we",",you",".","...","...);","/**","//","//...","//after","1","1,","1.","1.5","12","127.0.0.1","13","1,place","2","2.","2.2.1","2.4.x,","2.4.x.","2.5.x","2.5.x,","2.5.x.","2.6.0","20880","2:","3","3,","3.","4.","5","5.","5.1","5.10","5.11","5.12","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.2","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.3","5.4","5.5","5.6","5.7","5.8","5.9","6.","7.","9",";","=","==",">",">provider,export","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@adaptive({\"server\",","@extens","@help(parameter=\"...\",","@param","@return","@see","@throw","`export()`","`invoke()`","`invoker`","`refer()`","`refer()`.","aaa,","abov","above,extensionload","abstract","abstractcli","abstractclusterinvoker(directory)","abstractexport","abstractinvok","abstractserv","acceler","access","accident","accord","accquir","accumul","achiev","acitiv","act","action.on","activ","activated,for","activation,like:","ad","adapt","adaptive.","adaptive,th","add","added.","address","address,","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","address,y","address:","affact","affect","again(if","against","aggreg","allow","allowed,","alreadi","altern","alway","annot","annotation.","annotation,get","announc","anoth","anyon","aop","aop,","appear,","appli","applic","applications:","appointment:","arg","arg1,","arg2);","associ","async","as:filter,","attachments.","attent","attribut","attributes(us","attribute)","author","auto","automat","avail","available,","avoid","a,shar","b","backup","backup=10.20.153.10","bad","balanc","balance.","base","bbb","befor","below","beta","between","bind(),adapt","bind(url","book","both","branch","bring","bu","bug","bugfix","bugfix,","build","build,","building:","built","busi","by,","byte","c:\\document","cach","cache(url","cache=\"lru\",auto","cachefactori","cachefilter。","call","call,","call.","callback","cancel","cann't","car","care","carmak","carmaker、wheelmak","carmaker(car","case","case.","categor","categori","category.","category=overrid","cause.","cdi","center)","chang","channel","channel,","channelhandl","chapter:","check","check()","check=fals","checker","checkout","choic","choos","choosen","choosen(if","chooses.","class","class,you","class.","classifier,","classpath","class。","class。extensionload","class,us","claus","clean","click","client","client.","clone","close","cluster","cluster,","code","code.","codec","codes:","collect","collision.","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}.","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}.","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.rpcexception;","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.alibaba.dubbo.xxx.yyyinvokerwrapp","com.alibaba.xxx;","com.xxx;","comand:","comma,","command","command,","command.","command:","commun","communication,","communication.","community.","compar","compat","compil","compiler,","complet","condit","config","configed,","configur","configuration.","confirm","connect","connect(url","connection,","connections.","connecton","connectons.","consid","consum","consumer,","consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","consumers,","contain","content","content:","contents.","contents:","content:","contract","contract:","contributor","convenience.","convert","copi","core","correspond","correspondingli","cost","count","count(url","cover","creat","current","custom","cycl","data","data)","data,","ddubbo:application.logger=xxx","debug","declipse.workspace=/path/to/the/workspace/","default","default\"","default.","defin","defines.","definition.","delete.","demands:","demo,","demo:two","depen","depenc","depend","deserialize(paramet","design","desir","destroy","destroyed(invok","destroyed,","destroyed.","detail","detail=\"...\")","details:","details:paramet","details:when","determin","dev","dev,","develop","differ","directli","directori","directory)","disabl","discov","discovery.","disk","dispatch","dmaven.test.skip","do","doclose()","doconnect()","doinvoke(invoc","done","doopen()","draw","dubbo","dubbo'","dubbo,","dubbo.","dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","dubbo>","dubbocodec","dubboprotocol","dure","dynam","dynamic=fals","e.g.","e.g.:","each","easili","eclips","eclipse.","eclipse:configur","eclipse:eclips","effect","empti","empty,","enabled。","enhanc","enough","enough,","ensur","entiti","environ","equal","equival","error","establish","etc.","etc..","etc,multi","event","evolv","exact","exampl","example,","example:","example:","example:standard","except","exchang","exchangecli","exchangehandl","exchangeserv","exclu","exclud","execut","executed.","executed,th","executor","exist","existing,do","experienc","experience,","expir","explain","export","export()","export(dubbo://provid","export(invok","export(registry://registri","export,","export.","exported(export","exported.","exporter)","exporter,","exporterlisten","exportlistener,","export:","extend","extenders,","extens","extension\");","extension,","extension.","extensionfactori","extensionload","extensions.","extern","extract","facilit","factori","fail","failed.for","fails.","failur","fake","feather","featur","features,","features.","file","file=registry.cach","filenam","file,dubbo","file,not","file:","file:meta","filter","filter,","filter.","filter=\"","filter=\"xxx,default,yyy\",","filters.","final/html/introduction.html","find","fire","first","first),jud","first,","firstli","fix","fixed.","fixed,get","flat","follow","foo1","foo1\"","for.","format:","found","found,","framework","framework,","full","fulli","function","functionality.","furthermore,","ga","gener","get","get(object","getcache(url","getchannel()","getchannel(inetsocketaddress","getchannels()","getexecutor()","getextension(class","getinvoker(t","getlogger(url","getmonitor(url","getname().","getproxy(invok","getregistry(dubbo://registri","getregistry(url","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","getvalidator(url","git","good","group","group,","group.","grouping.","guarante","guid","hand","hand,","handler","handler)","handler);","happens.","health","here","here'","here.","hide","holder","honor","https://github.com/alibaba/dubbo","https://github.com/alibaba/dubbo/tags.","huge","id","ide.","idea","idea:idea","idempotent,","if(method","if(paramet","if(url","ignor","ignored.","illegalargumentexception(\"url","illegalstateexcept","illegalstateexception(\"fail","illegalstateexception。if","immediately.","impel","impl","impl.refer();","impl;","implemenet","implement","implementaion,","implementation)","implementation,","implementation.","implementations.","implementation。if","implementation。it","implementation。th","implementation,if","implementation:","import","improv","increas","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","inf/dubbo/com.alibaba.dubbo.container.container:","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","inf/dubbo/com.alibaba.dubbo.rpc.filter:","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","inf/dubbo/com.alibaba.dubbo.rpc.protocol,content:","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","inf/dubbo/com.alibaba.dubbo.validation.validation:","inf/dubbo/ful","info","info(str","inform","information.","info,nul","inherit","init","inject","injected.","inner","inov","input)","inputstream","instal","instanc","instance.","instance(proxy)","instance,wrapp","instant","instead","instructor","intefac","integration,","intellij","intercept","interest","interfac","interface)","interface,","interface.","interface=*&group=*&version=*&classifier=*","interface=com.alibaba.foo.barservice&version=1.0.0","interfaces,","interface,but","introduc","introduct","invoc","invocatiion.","invocatioin.","invocation)","invocation,","invocation.","invocation,if","invok","invoke()","invoke(invok","invoked,","invoker'","invoker)","invoker,","invoker.invoke(invocation);","invokerlisten","invokerlistener,","invokers,","ioc","ioexcept","ipc,","is,","isn't","issu","it'","it.","it:","jar","java","java.util.concurrent.executor;","jboss","jdk","jetti","jitter","jruby.jar","judg","jvm","keep","kept","key","key)","key,","key.","key.。such","key1","key2","key2,if","key,if","kit)","know","known","labels,w","larg","last","lastest","latest","layer","layer.","layout:","lazi","legal","librari","like:","line","list","list(not","list,","list.","list>","listen","listener)","listener);","listener,","load","loadbal","loadbalance)","loaded.","local","location.","log4j","logger","loggeradapt","logic","logic.","long","longer","look","lookup","lookup(url","lost","lost.","lower","m2_repo","main","mainli","maintained.","mainten","major","make","makecar()","makecar();","makecar(url","maker)","maker)、wheelmak","makewheel","makewheel();","makewheel(url","mani","master","match","matur","maven","maven_opts=","maven_optsshould","mean","mechanism.","mehod","member","merg","merge(directori","merge(t...","merger","messag","message)","meta","method","method!\");","method)","method,","method,judg","missing,and","mode","modul","module,al","moment,","monitor","monitorfactori","more","moreover,","move","msg)","multi","multipl","mvn","name","name)","name);","name,if","name.","name;if","name=th","name,fil","need","needed,","needed.","need。","network","network,","never","new","next","note","notes:","note:spi","note:th","notif","notifi","notification.","notifications,","notify(dubbo://provid","notify(list","notify(route://registri","notify:","notifylisten","notifylistener.java:","null","null\");","null)","null,","number","object","objectinput","objectoutput","occupi","ofadapt","offer","on","on.","once.","one),avoid","onreturn","onreturn/onerror...","open","oper","opportun","optimized.","or:","order","order,","or:","others.","otherwis","otherwise,","our","outer","output","output)","outputstream","overal","overrid","override,","packag","page","page.","pagehandl","paramet","parameters,","parameter(or","paramtyp","part","part.","parti","partial","particluar","particular","pass","path","pattern","pattern(pleas","pattern:spi","pay","peer","penalti","period","period.","persist","perspect","pick","pls.","point","points.","point,","poit","polici","policy,invoc","pool","port","possibl","powerful.","predefin","prefer","preliminari","previou","principl","pro","problem","problem,","procedur","product.","production.","program","project","projects,","promis","promot","proposition:","protect","protocol","protocol'","protocol)","protocol,","protocol;","protocol,place","prove","provid","provider.","providers,","providers.","providers,firstli","provider,group","proxi","proxy,","proxyfactori","public","pull","push","push,","put","put(object","qualifi","queri","query,","question","question:how","queu","quickli","quit","racecar","racecar(wheel,","racecarmak","read(file))","real","realiz","reasons:","reboot","receiv","record","recov","reduc","refer","refer()","refer().","refer(class","refer(dubbo://provid","refer(registry://registri","referenced.","reference:http://docs.jboss.org/cdi/tck/reference/1.0.1","referred(invok","refer:","regard","regist","register(dubbo://provid","register(url","registr","registri","registry,","registryfactori","registryfactory.java:","registryservic","registryservice.java:","registry:","regular","relat","releas","release.","remain","remot","remoteaddress)","remotingexcept","remotingexception;","remotingexception{","remov","repositori","repository。","repres","request","request,","requir","required,","rescan","resend","resourc","respond","respons","rest","result","result.","result;","results)","retri","return","revers","right","risk.","risks.","rout","router","routerfactori","routers:","rpc","rpccontext.getcontext().setremoteaddress();","rpcexcept","rpcexception;","rubi","ruby,","rubyscriptengin","rule","rule:","run(url","safeti","same","satisfi","save","say:","scan","scattered.","scenario","script","scriptengine,get","search","select","select(list>","send","sent","separ","seper","sequenc","serial","serialization,","serialize(paramet","seriou","server","server,","server:","servi","servic","service'","service,","service.","service:","services,jvm","session","session=60000","set","set)","set,","set.","setter","setter.","settings\\.m2\\repositori","setup","setwheelmaker(wheelmak","share","sharing,","side","side.","side,provid","significantli","simpli","simplifi","singl","singleton","skip","smell","sourc","source:jar","source:","span","speaking,","special","specif","specifi","specified.","spi","spi'","spi(servic","spi,","spi.","spi.extensionload","spis,","spis。newli","spi。a","spi。get","spi,dubbo","spi:","spring","src","stabil","stability,","stabl","stable:","stage","stage.。when","standard","start()","staticmap,it","statistics)","statu","statuscheck","sticki","stop()","store","strategi","strategy.","stream","string","string[]","structure:","student","styles,","subscrib","subscribe(dubbo://registri","subscribe(url","subscript","subscription,","such","suffix(file)).addparameter(\"rule\",","summari","summary=\"...\",","sunset","super(invoker);","super(type,","super(url,","super.unexport();","support","suppos","sure","system","t","tag","taken","tck","tck.","tcp","tell","telnet","telnet(channel","telnethandl","telnethandler,","test","text","theori","there'","third","this.wheelmak","those","thread","threadpool","through","throw","throwabl","thrown","thu","time","time,","time.","timecost","timeout","timeout=1000","todo","togeth","together.","token","toler","too,","tool.","topics:","track","transmision.","transmit","transmition,","transport","treat","tri","trial","tripartit","two","type","type,","type,extensionload","type.","type1","type2","type?)","ugli","uncertain","under","unexport()","unexported(export","unix","unregist","unregister(url","unsubscrib","unsubscribe(url","unsubscription,","unsupportedoperationexception(\"i","until","up","upcom","upgrad","upper","uri","url","url)","url);","url,","url.","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.get(\"wheel.type\")","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","url.url","urls);","url,aft","url,but","url,default","url,dynam","us","usag","usage:","use:","used.","used。for","useless","user","username:password","valid","validate(invoc","validation.","valu","value)","value,","value,th","variabl","veri","verifi","versa.","versio,","version","version,","versioning,","versions)","versions),","version,e.g.","version:high","version:low","via","view","vise","void","wast","way","way,","welcom","well:","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","whenextensionload","whether","which'","whole","wildcard","window","work","workspac","wrap","wrapper","xingzhi","xmx1024m","xx:maxpermsize=512m","xxx","xxx=com.alibaba.xxx.xxxprotocol","xxx=com.xxx.xxxcachefactori","xxx=com.xxx.xxxcachefactory)","xxx=com.xxx.xxxclust","xxx=com.xxx.xxxcluster)","xxx=com.xxx.xxxcompil","xxx=com.xxx.xxxcompiler)","xxx=com.xxx.xxxcontain","xxx=com.xxx.xxxcontainer)","xxx=com.xxx.xxxdispatch","xxx=com.xxx.xxxdispatcher)","xxx=com.xxx.xxxexchang","xxx=com.xxx.xxxexchanger)","xxx=com.xxx.xxxexporterlisten","xxx=com.xxx.xxxexporterlistener)","xxx=com.xxx.xxxextensionfactori","xxx=com.xxx.xxxextensionfactory)","xxx=com.xxx.xxxfilt","xxx=com.xxx.xxxfilter)","xxx=com.xxx.xxxinvokerlisten","xxx=com.xxx.xxxinvokerlistener)","xxx=com.xxx.xxxloadbal","xxx=com.xxx.xxxloadbalance)","xxx=com.xxx.xxxloggeradapt","xxx=com.xxx.xxxloggeradapter)","xxx=com.xxx.xxxmerg","xxx=com.xxx.xxxmerger)","xxx=com.xxx.xxxmonitorfactori","xxx=com.xxx.xxxmonitorfactory)","xxx=com.xxx.xxxnetwork","xxx=com.xxx.xxxnetworker)","xxx=com.xxx.xxxpagehandl","xxx=com.xxx.xxxpagehandler)","xxx=com.xxx.xxxprotocol","xxx=com.xxx.xxxprotocol)","xxx=com.xxx.xxxproxyfactori","xxx=com.xxx.xxxproxyfactory)","xxx=com.xxx.xxxregistryfactori","xxx=com.xxx.xxxregistryfactory)","xxx=com.xxx.xxxrouterfactori","xxx=com.xxx.xxxrouterfactory)","xxx=com.xxx.xxxseri","xxx=com.xxx.xxxserialization)","xxx=com.xxx.xxxstatuscheck","xxx=com.xxx.xxxstatuschecker)","xxx=com.xxx.xxxtelnethandl","xxx=com.xxx.xxxtelnethandler)","xxx=com.xxx.xxxthreadpool","xxx=com.xxx.xxxthreadpool)","xxx=com.xxx.xxxtransport","xxx=com.xxx.xxxtransporter)","xxx=com.xxx.xxxvalid","xxx=com.xxx.xxxvalidation)","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxcluster","xxxcluster.java","xxxcluster.java:","xxxcompil","xxxcompiler.java","xxxcompiler.java:","xxxcontain","xxxcontainer.java","xxxcontainer.java:","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","xxxfilter","xxxfilter.java","xxxfilter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","xxxmerger","xxxmerger.java","xxxmerger.java:","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","xxxprotocol","xxxprotocol(protocol","xxxprotocol.java","xxxprotocol.java:","xxxprotocolwrapp","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","xxxserial","xxxserialization.java","xxxserialization.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","yyi","yyy,","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","{@link","|","}","};","↩","。if","。the","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","没有配置cache属性时,使用此配置","用法","订阅服务.","),cach",",one",",setwheelmak",",string[]",",the",",to",",xxx,",":"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"dubbo-dev-book\nThis book is mainly about the design principles of dubbo, also covers the following topics: extension, coding styles, versio, build, etc.. \n"},"build.html":{"url":"build.html","title":"1 How To Build","keywords":"","body":"source code build\ncheckout\ncheckout the lastest project source code via below comand:\ngit clone https://github.com/alibaba/dubbo dubbo\n\nbranch\nWe apply master as the major branch for dev, and branch as the maintenance release. Tags for all versions can be checked via https://github.com/alibaba/dubbo/tags.\nbuilding\nDubbo applies maven as the building tool.\nDemands:\n\nJava above 1.5 version\nMaven version 2.2.1 or above    \n\nbelow  MAVEN_OPTSshould be configured before building:\nexport MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=512m\n\nbuild with below command:\nmvn clean install\n\nskip testing using below building command:\nmvn install -Dmaven.test.skip\n\nbuilding jar package of source code\nbuild Dubbo source code jar package with below command, which can debug Dubbo source code. \nmvn clean source:jar install -Dmaven.test.skip\n\nIDE support\nuse below command to generate IDE.\nIntellij Idea\nmvn idea:idea\n\neclipse\nmvn eclipse:eclipse\n\nimporting into eclipse\nfirst, a maven repository needs to be configured in eclipse. Click Preferences -> Java -> Build Path -> Classpath  M2_REPO is the environment variable poiting to local maven repository。 2\nUsing below maven command as well: \nmvn eclipse:configure-workspace -Declipse.workspace=/path/to/the/workspace/\n\n\n1. view the source code through https://github.com/alibaba/dubbo  ↩\n\n\n2. path under UNIX is ${HOME}/.m2/repository, path under Windows is C:\\Documents and Settings\\.m2\\repository ↩\n\n"},"SPI.html":{"url":"SPI.html","title":"3 How SPI Works","keywords":"","body":"SPI Loading\nSPI Config\nSource:\nDubbo SPI is inherited from standard JDK SPI(Service Provider Interface) and makes it more powerful.\nDubbo fixed below issues of the standard JDK SPI:\n\nthe standard JDK  SPI will load  and instantize all implementation at once. It will be a waste of resources if the implementation is timecosted ,but never be used.\nWe cann't accquire the SPI name,if loading the SPI implementation is failed.For example:standard JDK  ScriptEngine,get script type by invoking method getName(). RubyScriptEngine class will load failed if the depenency jar jruby.jar is missing,and the real error info will be lost. When user executes ruby scripts , program throws exception , telling not support ruby, but it is not the real cause.\nEnhance the SPI functionality by supporting  IoC and AOP ,one SPI can be easily injected by another SPI simply using  setter.\n\nAppointment:\nIn the jar file containing extension class 1,places a config file  META-INF/dubbo/full interface name,file content pattern:SPI name=the fully qualified name for the extension class,use new line seperator for multiple implementation.\nExample:\nTo extend  Dubbo Protocol,placee a text file in the extension jar file:META-INF/dubbo/com.alibaba.dubbo.rpc.Protocol,content:\nxxx=com.alibaba.xxx.XxxProtocol\n\ncontent of the implementation 2:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implemenets Protocol { \n    // ...\n}\n\nConfiguration in config module\nIn Dubbo config module,all SPI points have related attributes or labels,we can choose the specific SPI implementation by using its name. Like:\n\n\nSPI Features\nSPI Auto Wrap\nAuto wrap the SPI's Wrapper class。ExtensionLoader  loads the SPI implementation,if the SPI has a copy instructor ,it will be regarded as the SPI's Wrapper class。\nWrapper class content:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocolWrapper implemenets Protocol {\n    Protocol impl;\n\n    public XxxProtocol(Protocol protocol) { impl = protocol; }\n\n    //after interface method is executed,the method in extension will be executed\n    public void refer() {\n        //... some operation\n        impl.refer();\n        // ... some operation\n    }\n\n    // ...\n}\n\nWrapper class also implements the same SPI interface,but Wrapper is not the real implementation。It is used for wrap the real  implementation  returned from the ExtensionLoader 。The real returned instance by   ExtensionLoader  is the Wrapper class instance,Wrapper holder the real SPI implementation class。\nThere can be many Wrapper for one spi, simply add one if you need。\nBy Wrapper class,you will be able move same logics into Wrapper for all SPIs。Newly added Wrapper class add external logics for all spis, looks like  AOP, Wrapper acts as a proxy for SPI.\nSPI Auto Load\nwhen loading the SPI,Dubbo will auto load the depency SPI. When one SPI implementation contains attribute which is also an SPI of another type,ExtensionLoader will automatically load the depency SPI.ExtensionLoader knows all the members of the specific SPI by scanning the setter method of all implementation class.\nDemo:two SPI  CarMaker(car maker)、WheelMaker (wheel maker)\nIntefaces look like:\npublic interface CarMaker {\n    Car makeCar();\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel();\n}\n\nCarMaker  implementation:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar() {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel();\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\nwhenExtensionLoader loading CarMaker  implementation RaceCar ,setWheelMaker  needs paramType WheelMaker  which is also an SPI, It will be automatically loaded .\nThis brings a new question:How ExtensionLoader determines which implementation to use when load the injected SPI。As for this demo, when existing multi WheelMaker  implementation, which one should the ExtensionLoader  chooses.\nGood question ,we will explain it in the following chapter: SPI Auto Adaptive.\nSPI Auto Adaptive\nThe depency SPI that ExtensionLoader  injects is an instance of Adaptive,the real spi implementation is known until the adaptive instance is be executed.\nDubbo  use URL (containing Key-Value) to pass the configuration.\nThe SPI method invocation has the URL parameter(Or Entity that has URL attribute)\nIn this way depended SPI can get configuration from URL,after config all SPI  key needed, configuration information will be passed from outer by URL.URL act as a bus when pass the config information.\nDemo:two SPI  CarMaker、WheelMaker\ninterface looks like:\npublic interface CarMaker {\n    Car makeCar(URL url);\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel(URL url);\n}\n\nCarMaker  implementation:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar(URL url) {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel(url);\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\nwhen execute the code above\n// ...\nWheel wheel = wheelMaker.makeWheel(url);\n// ...\n\n,the injected Adaptive  object determine which  WheelMaker 's  makeWheel  method will be executed by predefined Key.。Such  as wheel.type, key  url.get(\"wheel.type\")  will determine WheelMake  implementation。The logic ofAdaptive instance of fixed,getting the predefined Key of the URL,dynamically creating the real implementation and execute it.\nFor Dubbo , the SPI  Adaptive  implementation in  ExtensionLoader  is dynamically created when dubbo is loading the SPI。Get the Key from URL, the Key will be provided through @Adaptive annotation for the interface method definition.\nBelow is Dubbo  Transporter SPI codes:\npublic interface Transporter {\n    @Adaptive({\"server\", \"transport\"})\n    Server bind(URL url, ChannelHandler handler) throws RemotingException;\n\n    @Adaptive({\"client\", \"transport\"})\n    Client connect(URL url, ChannelHandler handler) throws RemotingException;\n}\n\nfor the method bind(),Adaptive will firstly search server key,if no Key  were founded then will search transport key ,to determine the implementation that the proxy represent for.\nSPI Auto Activation\nAs for Collections SPI, such as:Filter, InvokerListener, ExportListener, TelnetHandler, StatusChecker  etc,multi implementations can be loaded at one time. User can simplify configuration by using auto activation,Like:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate // Active for any condition\npublic class XxxFilter implements Filter {\n    // ...\n}\n\nOr:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(\"xxx\") // when configed xxx parameter and the parameter has a valid value,the SPI is activated,for example configed cache=\"lru\",auto acitivate CacheFilter。\npublic class XxxFilter implements Filter {\n    // ...\n}\n\nOr:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(group = \"provider\", value = \"xxx\") // only activate for provider,group can be \"provider\" or \"consumer\"\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n\n1. Note:The config file here is in you own jar file,not in dubbo release jar file,Dubbo  will scan all jar files for the same filename in  ClassPath and merge together then ↩\n\n\n2. Note:SPI will be loaded in singleton pattern(Please ensure thread safety ),cached in  ExtensionLoader  ↩\n\n"},"impls/introduction.html":{"url":"impls/introduction.html","title":"5 SPI Extensions","keywords":"","body":"SPI Extension Implementations\nSPI extension interface is used for system integration, it's also useful for dubbo contributor to extend dubbo functionality.\n"},"impls/protocol.html":{"url":"impls/protocol.html","title":"5.1 Protocol","keywords":"","body":"Protocol Extension\nSummary\nExtension to RPC protocol, hide details of remote call.\nContract:\n\nWhen user calls invoke() method of Invoker object which's returned from refer() call, the protocol needs to correspondingly execute invoke() method of Invoker object passed from remote export() method associated with the same URL.\nMoreover, it's protocol's responsibility to implement Invoker which's returned from refer(). Generally speaking, protocol sends remote request in the Invoker implementation, but needs not to care about the Invoker passed into export() since the framework will implement the logic and pass in the instance.\n\nNotes:\n\nProtocol does not need to care about the proxy of the business interface. The upper layer of the framework will convert Invoker into business interface.\nIt is not a requirement that the protocol must use TCP for network communication. It could be file-sharing, IPC, or others.\n\nExtension Interface\n\ncom.alibaba.dubbo.rpc.Protocol\ncom.alibaba.dubbo.rpc.Exporter\ncom.alibaba.dubbo.rpc.Invoker\n\npublic interface Protocol {\n    /**\n     * Export remote service: \n     * 1. Should save address info for the request when the protocol receives it: RpcContext.getContext().setRemoteAddress();\n     * 2. export() must be implemented as idempotent, that is, it should not introduce side effect when the implementation gets called with the same Invoker for more than once.\n     * 3. Invoker is passed by the framework, and the protocol should not care about it. \n     * \n     * @param  Service type\n     * @param invoker Service invoker\n     * @return exporter The reference of service exporter, used for cancelling service export.\n     * @throws RpcException throw when there's any error during service export, e.g. the port is occupied\n     */\n     Exporter export(Invoker invoker) throws RpcException;\n\n    /**\n     * Reference remote service: \n     * 1. When user calls `invoke()` method of `Invoker` object which's returned from `refer()` call, the protocol needs to correspondingly execute `invoke()` method of `Invoker` object passed from remote `export()` method associated with the same URL. \n     * 2. It's protocol's responsibility to implement `Invoker` which's returned from `refer()`. Generally speaking, protocol sends remote request in the `Invoker` implementation. \n     * 3. When there's check=false set in URL, the implementation must not throw exception but try to recover when connection fails.\n     * \n     * @param  Service type\n     * @param type Service type\n     * @param url URL address for the remote service\n     * @return invoker service's local proxy\n     * @throws RpcException throw when there's any error while connecting to the service provider\n     */\n     Invoker refer(Class type, URL url) throws RpcException;\n\n}\n\nExtension Configuration\n\n\n\n\n --> \n\n\nExisting Protocol\n\ncom.alibaba.dubbo.rpc.injvm.InjvmProtocol\ncom.alibaba.dubbo.rpc.dubbo.DubboProtocol\ncom.alibaba.dubbo.rpc.rmi.RmiProtocol\ncom.alibaba.dubbo.rpc.http.HttpProtocol\ncom.alibaba.dubbo.rpc.http.hessian.HessianProtocol\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProtocol.java (Protocol implementation)\n                |-XxxExporter.java (Exporter implementation)\n                |-XxxInvoker.java (Invoker implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Protocol (plain text file with the content: xxx=com.xxx.XxxProtocol)\nXxxProtocol.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implements Protocol {\n    public  Exporter export(Invoker invoker) throws RpcException {\n        return new XxxExporter(invoker);\n    }\n    public  Invoker refer(Class type, URL url) throws RpcException {\n        return new XxxInvoker(type, url);\n    }\n}\n\nXxxExporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractExporter;\n\npublic class XxxExporter extends AbstractExporter {\n    public XxxExporter(Invoker invoker) throws RemotingException{\n        super(invoker);\n        // ...\n    }\n    public void unexport() {\n        super.unexport();\n        // ...\n    }\n}\n\nXxxInvoker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractInvoker;\n\npublic class XxxInvoker extends AbstractInvoker {\n    public XxxInvoker(Class type, URL url) throws RemotingException{\n        super(type, url);\n    }\n    protected abstract Object doInvoke(Invocation invocation) throws Throwable {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Protocol:\nxxx=com.xxx.XxxProtocol\n\n"},"impls/filter.html":{"url":"impls/filter.html","title":"5.2 Filter","keywords":"","body":"Filter Extension\nSummary\nExtension for intercepting the invocation for both service provider and consumer, furthermore, most of functions in dubbo are implemented base on the same mechanism. Since every time when remote method is invoked, the filter extensions will be executed too, the corresponding penalty should be considered before more filters are added.\nContract:\n\nUser defined filters are executed after built-in filters by default.\nSpecial value default is introduced to represent the default extension location. For example: for filter=\"xxx,default,yyy\", xxx is before default filter, and yyy is after the default filter.\nSpecial value - means delete. For example: filter=\"-foo1\" excludes foo1 extension. For example, filter=\"-default\" exclues all default filters.\nWhen provider and service have filter configured at the same moment, all filters are accumulated together instead of override, for example: for  and ,xxx, yyy, aaa, bbb are all count as filters. In order to change to override, use:  \n\nExtension Interface\ncom.alibaba.dubbo.rpc.Filter\nExtension Configuration\n\n\n\n\n\n\n\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.filter.EchoFilter\ncom.alibaba.dubbo.rpc.filter.GenericFilter\ncom.alibaba.dubbo.rpc.filter.GenericImplFilter\ncom.alibaba.dubbo.rpc.filter.TokenFilter\ncom.alibaba.dubbo.rpc.filter.AccessLogFilter\ncom.alibaba.dubbo.rpc.filter.CountFilter\ncom.alibaba.dubbo.rpc.filter.ActiveLimitFilter\ncom.alibaba.dubbo.rpc.filter.ClassLoaderFilter\ncom.alibaba.dubbo.rpc.filter.ContextFilter\ncom.alibaba.dubbo.rpc.filter.ConsumerContextFilter\ncom.alibaba.dubbo.rpc.filter.ExceptionFilter\ncom.alibaba.dubbo.rpc.filter.ExecuteLimitFilter\ncom.alibaba.dubbo.rpc.filter.DeprecatedFilter\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxFilter.java (Filter implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Filter (plain text file with the content: xxx=com.xxx.XxxFilter)\nXxxFilter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Filter;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxFilter implements Filter {\n    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {\n        // before filter ...\n        Result result = invoker.invoke(invocation);\n        // after filter ...\n        return result;\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Filter:\nxxx=com.xxx.XxxFilter\n\n"},"impls/invoker-listener.html":{"url":"impls/invoker-listener.html","title":"5.3 InvokerListener","keywords":"","body":"InvokerListener Extension\nSummary\nFire event when there's any service referenced.\nExtension Interface\ncom.alibaba.dubbo.rpc.InvokerListener\nExtension Configuration\n\n\n \n\n\n\nExisting Extension\ncom.alibaba.dubbo.rpc.listener.DeprecatedInvokerListener\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxInvokerListener.java (InvokerListener implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.InvokerListener (plain text file with the content: xxx=com.xxx.XxxInvokerListener)\nXxxInvokerListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.InvokerListener;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxInvokerListener implements InvokerListener {\n    public void referred(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public void destroyed(Invoker invoker) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.InvokerListener:\nxxx=com.xxx.XxxInvokerListener\n\n"},"impls/exporter-listener.html":{"url":"impls/exporter-listener.html","title":"5.4 ExporterListener","keywords":"","body":"ExporterListener Extension\nSummary\nFire events when there's any service exported. \nExtension Interface\ncom.alibaba.dubbo.rpc.ExporterListener\nExtension Configuration\n\n\n\n\n\nExisting Extension\ncom.alibaba.dubbo.registry.directory.RegistryExporterListener\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExporterListener.java (ExporterListener implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ExporterListener (plain text file with the content: xxx=com.xxx.XxxExporterListener)\nXxxExporterListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ExporterListener;\nimport com.alibaba.dubbo.rpc.Exporter;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxExporterListener implements ExporterListener {\n    public void exported(Exporter exporter) throws RpcException {\n        // ...\n    }\n    public void unexported(Exporter exporter) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ExporterListener:\nxxx=com.xxx.XxxExporterListener\n\n"},"impls/cluster.html":{"url":"impls/cluster.html","title":"5.5 Cluster","keywords":"","body":"Cluster Extension\nSummary\nGroup service providers in a cluster, and treat them as one single provider.\nExtension Interface\ncom.alibaba.dubbo.rpc.cluster.Cluster\nExtension Configuration\n\n  -->\n\n\nExisting Extensions\n\ncom.alibaba.dubbo.rpc.cluster.support.FailoverCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailfastCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailsafeCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailbackCluster\ncom.alibaba.dubbo.rpc.cluster.support.ForkingCluster\ncom.alibaba.dubbo.rpc.cluster.support.AvailableCluster\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCluster.java (Cluster implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Cluster (plain text file with the content: xxx=com.xxx.XxxCluster)\nXxxCluster.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Cluster;\nimport com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker;\nimport com.alibaba.dubbo.rpc.cluster.Directory;\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxCluster implements Cluster {\n    public  Invoker merge(Directory directory) throws RpcException {\n        return new AbstractClusterInvoker(directory) {\n            public Result doInvoke(Invocation invocation, List> invokers, LoadBalance loadbalance) throws RpcException {\n                // ...\n            }\n        };\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Cluster:\nxxx=com.xxx.XxxCluster\n\n"},"impls/router.html":{"url":"impls/router.html","title":"5.6 Router","keywords":"","body":"Router Extension\nSummary\nPick one from service providers and fire the invocation.\nExtension Interface\n\ncom.alibaba.dubbo.rpc.cluster.RouterFactory\ncom.alibaba.dubbo.rpc.cluster.Router\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.cluster.router.ScriptRouterFactory\ncom.alibaba.dubbo.rpc.cluster.router.FileRouterFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRouterFactory.java (LoadBalance implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.RouterFactory (plain text file with the content: xxx=com.xxx.XxxRouterFactory)\nXxxRouterFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.RouterFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxRouterFactory implements RouterFactory {\n    public  List> select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.RouterFactory:\nxxx=com.xxx.XxxRouterFactory\n\n"},"impls/load-balance.html":{"url":"impls/load-balance.html","title":"5.7 LoadBalance","keywords":"","body":"LoadBalance Extension\nSummary\nPick one from service providers and fire the invocation.\nExtension Interface\ncom.alibaba.dubbo.rpc.cluster.LoadBalance\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoadBalance.java (LoadBalance implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.LoadBalance (plain text file with the content: xxx=com.xxx.XxxLoadBalance)\nXxxLoadBalance.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException; \n\npublic class XxxLoadBalance implements LoadBalance {\n    public  Invoker select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance:\nxxx=com.xxx.XxxLoadBalance\n\n"},"impls/merger.html":{"url":"impls/merger.html","title":"5.8 Merger","keywords":"","body":"Merger Extension\nSummary\nMerge strategy for return result aggregation in group.\nExtension Interface\ncom.alibaba.dubbo.rpc.cluster.Merger\nExtension Configuration\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.cluster.merger.ArrayMerger\ncom.alibaba.dubbo.rpc.cluster.merger.ListMerger\ncom.alibaba.dubbo.rpc.cluster.merger.SetMerger\ncom.alibaba.dubbo.rpc.cluster.merger.MapMerger\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMerger.java (Merger implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Merger (plain text file with the content: xxx=com.xxx.XxxMerger)\nXxxMerger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Merger;\n\npublic class XxxMerger implements Merger {\n    public T merge(T... results) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Merger:\nxxx=com.xxx.XxxMerger\n\n"},"impls/registry.html":{"url":"impls/registry.html","title":"5.9 Registry","keywords":"","body":"Registry Extension\nSummary\nRegistry extension is used for service registration and discovery.\nExtension Interface\n\ncom.alibaba.dubbo.registry.RegistryFactory\ncom.alibaba.dubbo.registry.Registry\n\nExtension Configuration\n\n\n\n\n -->\n\n\nExtension Contract\nRegistryFactory.java:\npublic interface RegistryFactory {\n    /**\n     * Connect to registry server\n     * \n     * The contract for connecting to registry server: \n     * 1. Will not check connection when check=false is set, otherwise exception will be thrown if connection fails. \n     * 2. Support authorizing against username:password in the URL \n     * 3. Support registry server backup with backup=10.20.153.10 \n     * 4. Support cache on local disk with file=registry.cache \n     * 5. Support timeout setup with timeout=1000 \n     * 6. Support session expiration setup with session=60000 \n     * \n     * @param url registry server address, null is not allowed\n     * @return reference to registry server, never return null\n     */\n    Registry getRegistry(URL url); \n}\n\nRegistryService.java:\npublic interface RegistryService { // Registry extends RegistryService \n    /**\n     * Register service.\n     * \n     * Contract for registering service: \n     * 1. Registration failure will be ignored and kept retrying if check=false is set in URL, otherwise exception will be thrown \n     * 2. Persistence is required if dynamic=false is set in URL, otherwise, the registration info will be removed automatically when register quits accidentally \n     * 3. Persistent by category if category=overrides is set in URL, default category is providers. It is possible to notify by category. \n     * 4. Data lost is not tolerant when registry server reboots or network jitter happens.  \n     * 5. It is not allowed to override each other when URLs have same URI part but different parameters \n     * \n     * @param url registration info,null is not allowed, e.g.: dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void register(URL url);\n\n    /**\n     * Unregister service.\n     * \n     * Contract for unregistering service: \n     * 1. IllegalStateException should be thrown when registration info which's supposed to be persistent (with dynamic=false set) cannot be found, otherwise it should be ignored. \n     * 2. To cancel one service, extract match on its URL will be honored \n     * \n     * @param url registration info,null is not allowed, e.g.: dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void unregister(URL url);\n\n    /**\n     * 订阅服务.\n     * Subscribe service.\n     * \n     * Contract for subscribing service: \n     * 1. Subscription failure will be ignored and kept retrying if check=false is set in URL \n     * 2. Only the specified category will be notified if category=overrides is set in URL. Categories are seperated with comma, and all categorized data will be subscribed when wildcard \"*\" is specified. \n     * 3. Allow to query by interface, group, version, classifier, e.g.: interface=com.alibaba.foo.BarService&version=1.0.0\n     * 4. Allow to query with wildcard \"*\" to subscribe all versions under all categories for all interfaces, e.g.: interface=*&group=*&version=*&classifier=*\n     * 5. Subscription will be automatically recoverred when registry server reboots or network jitter happens. \n     * 6. It is not allowed to override each other when URLs have same URI part but different parameters \n     * 7. Subscription procedure will not return until the first notification happens. \n     * \n     * @param url URL for subscription, null isn't allowed, e.g.: consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener notification listener, null is not allowed\n     */\n    void subscribe(URL url, NotifyListener listener);\n\n    /**\n     * Unsubscribe service.\n     * \n     * Contract for unsubscribing service: \n     * 1. Simply ignore if not subscribe \n     * 2. Unsubscribe with URL exact match \n     * \n     * @param url URL for unsubscription, null is not allowed, e.g.: consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener notification listener, null is not allowed\n     */\n    void unsubscribe(URL url, NotifyListener listener);\n\n    /**\n     * 查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。\n     * Lookup subscription list. Compared to push mode for subscription, this is pull mode and returns result only once.\n     * \n     * @see com.alibaba.dubbo.registry.NotifyListener#notify(List)\n     * @param url URL for  query, null is not allowed, e.g.: consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @return subscription list, could be null, has the same meaning as the parameters in {@link com.alibaba.dubbo.registry.NotifyListener#notify(List)}.\n     */\n    List lookup(URL url);\n\n}\n\nNotifyListener.java:\npublic interface NotifyListener { \n    /**\n     * Fire event when receive service change notification.\n     * \n     * Contract for notify: \n     * 1. Always notify with the whole data instead of partial data from the perspective of service interface and data type. In this way, user needs not compare with the previous result. \n     * 2. First notification for subscription must contain the full set of data for one particular service \n     * 3. It is allowed to separate the different type of data in the upcoming notifications, e.g.: it is legal to only notify one of types among providers, consumers, routes or overrides each time, but pls. note for this particular type, the data must be a full set. \n     * 4. If the data for one particular type is empty, need to notify with a special URL which has empty as its protocol and has category parameter for this particluar type.\n     * 5. Notifier (usually it is monitor center) needs to guarantee the notification sequence by, for say: single thread push, queuing in order,  versioning, etc. \n     * \n     * @param urls subscription list, always not empty, equivalent to the return result of {@link com.alibaba.dubbo.registry.RegistryService#lookup(URL)}.\n     */\n    void notify(List urls);\n\n}\n\nExisting Extension\ncom.alibaba.dubbo.registry.support.dubbo.DubboRegistryFactory\nExtension Guide\nDirectory structure:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRegistryFactoryjava (RegistryFactory implementation)\n                |-XxxRegistry.java (Registry implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.registry.RegistryFactory (plain text file with the content: xxx=com.xxx.XxxRegistryFactory)\nXxxRegistryFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.RegistryFactory;\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistryFactory implements RegistryFactory {\n    public Registry getRegistry(URL url) {\n        return new XxxRegistry(url);\n    }\n}\n\nXxxRegistry.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.registry.NotifyListener;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistry implements Registry {\n    public void register(URL url) {\n        // ...\n    }\n    public void unregister(URL url) {\n        // ...\n    }\n    public void subscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n    public void unsubscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory:\nxxx=com.xxx.XxxRegistryFactory\n\n"},"impls/monitor.html":{"url":"impls/monitor.html","title":"5.10 Monitor","keywords":"","body":"Monitor Extension\nSummary\nExtension to monitor service invocation times and time taken for each service invocation.\nExtension Interface\n\ncom.alibaba.dubbo.monitor.MonitorFactory\ncom.alibaba.dubbo.monitor.Monitor\n\nExtension Configuration\n\n\n\nExisting Extension\ncom.alibaba.dubbo.monitor.support.dubbo.DubboMonitorFactory\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMonitorFactoryjava (MonitorFactory implementation)\n                |-XxxMonitor.java (Monitor implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.monitor.MonitorFactory (plain text file with the format: xxx=com.xxx.XxxMonitorFactory)\nXxxMonitorFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.MonitorFactory;\nimport com.alibaba.dubbo.monitor.Monitor;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxMonitorFactory implements MonitorFactory {\n    public Monitor getMonitor(URL url) {\n        return new XxxMonitor(url);\n    }\n}\n\nXxxMonitor.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.Monitor;\n\npublic class XxxMonitor implements Monitor {\n    public void count(URL statistics) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.monitor.MonitorFactory:\nxxx=com.xxx.XxxMonitorFactory\n\n"},"impls/extension-factory.html":{"url":"impls/extension-factory.html","title":"5.11 ExtensionFactory","keywords":"","body":"ExtensionFactory Extension\nSummary\nFactory to load dubbo extensions.\nExtension Interface\ncom.alibaba.dubbo.common.extension.ExtensionFactory\nExtension Configuration\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.extension.factory.SpiExtensionFactory\ncom.alibaba.dubbo.config.spring.extension.SpringExtensionFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExtensionFactory.java (ExtensionFactory implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.extension.ExtensionFactory (plain text file with the content: xxx=com.xxx.XxxExtensionFactory)\nXxxExtensionFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.extension.ExtensionFactory;\n\npublic class XxxExtensionFactory implements ExtensionFactory {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.extension.ExtensionFactory:\nxxx=com.xxx.XxxExtensionFactory\n\n"},"impls/proxy-factory.html":{"url":"impls/proxy-factory.html","title":"5.12 ProxyFactory","keywords":"","body":"ProxyFactory Extension\nSummary\nConvert Invoker into business interface.\nExtension Interface\ncom.alibaba.dubbo.rpc.ProxyFactory\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.proxy.JdkProxyFactory\ncom.alibaba.dubbo.rpc.proxy.JavassistProxyFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProxyFactory.java (ProxyFactory implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ProxyFactory (plain text file with the content: xxx=com.xxx.XxxProxyFactory)\nXxxProxyFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ProxyFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxProxyFactory implements ProxyFactory {\n    public  T getProxy(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public  Invoker getInvoker(T proxy, Class type, URL url) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ProxyFactory:\nxxx=com.xxx.XxxProxyFactory\n\n"},"impls/compiler.html":{"url":"impls/compiler.html","title":"5.13 Compiler","keywords":"","body":"Compiler Extension\nSummary\nJava compiler, used for byte code dynamic generation for RPC invocation.\nExtension Interface\ncom.alibaba.dubbo.common.compiler.Compiler\nExtension Configuration\nNo configuration required, the extension will be automatically discovered and loaded.\nExisting Extensions\n\ncom.alibaba.dubbo.common.compiler.support.JdkCompiler\ncom.alibaba.dubbo.common.compiler.support.JavassistCompiler\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCompiler.java (Compiler implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.compiler.Compiler (plain text file with the content: xxx=com.xxx.XxxCompiler)\nXxxCompiler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.compiler.Compiler;\n\npublic class XxxCompiler implements Compiler {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.compiler.Compiler:\nxxx=com.xxx.XxxCompiler\n\n"},"impls/dispatcher.html":{"url":"impls/dispatcher.html","title":"5.14 Dispatcher","keywords":"","body":"Dispatcher Extension\nSummary\nThread pool dispatch strategy.\nExtension Interface\ncom.alibaba.dubbo.remoting.Dispatcher\nExtension Configuration\n\n -->\n\n\nExisting Extensions\n\ncom.alibaba.dubbo.remoting.transport.dispatcher.all.AllDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxDispatcher.java (Dispatcher implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Dispatcher (plain text file with the content: xxx=com.xxx.XxxDispatcher)\nXxxDispatcher.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Dispatcher;\n\npublic class XxxDispatcher implements Dispatcher {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Dispatcher:\nxxx=com.xxx.XxxDispatcher\n\n"},"impls/threadpool.html":{"url":"impls/threadpool.html","title":"5.15 Threadpool","keywords":"","body":"ThreadPool Extension\nSummary\nThread pool strategy extension for service provider. When server receives one request, it needs a thread from thread pool to execute business logic in service provider.\nExtension Interface\ncom.alibaba.dubbo.common.threadpool.ThreadPool\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.threadpool.FixedThreadPool\ncom.alibaba.dubbo.common.threadpool.CachedThreadPool\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxThreadPool.java (ThreadPool implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.threadpool.ThreadPool (plain text file with the content: xxx=com.xxx.XxxThreadPool)\nXxxThreadPool.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.threadpool.ThreadPool;\nimport java.util.concurrent.Executor;\n\npublic class XxxThreadPool implements ThreadPool {\n    public Executor getExecutor() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.threadpool.ThreadPool:\nxxx=com.xxx.XxxThreadPool\n\n"},"impls/serialize.html":{"url":"impls/serialize.html","title":"5.16 Serialization","keywords":"","body":"Serialization Extension\nSummary\nExtension to serializing java object into byte code stream for transporting on the network, and vise versa.\nExtension Interface\n\ncom.alibaba.dubbo.common.serialize.Serialization\ncom.alibaba.dubbo.common.serialize.ObjectInput\ncom.alibaba.dubbo.common.serialize.ObjectOutput\n\nExtension Configuration\n\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.serialize.dubbo.DubboSerialization\ncom.alibaba.dubbo.common.serialize.hessian.Hessian2Serialization\ncom.alibaba.dubbo.common.serialize.java.JavaSerialization\ncom.alibaba.dubbo.common.serialize.java.CompactedJavaSerialization\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxSerialization.java (Serialization implementation)\n                |-XxxObjectInput.java (ObjectInput implementation)\n                |-XxxObjectOutput.java (ObjectOutput implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.serialize.Serialization (plain text file with the content: xxx=com.xxx.XxxSerialization)\nXxxSerialization.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.serialize.Serialization;\nimport com.alibaba.dubbo.common.serialize.ObjectInput;\nimport com.alibaba.dubbo.common.serialize.ObjectOutput;\n\n\npublic class XxxSerialization implements Serialization {\n    public ObjectOutput serialize(Parameters parameters, OutputStream output) throws IOException {\n        return new XxxObjectOutput(output);\n    }\n    public ObjectInput deserialize(Parameters parameters, InputStream input) throws IOException {\n        return new XxxObjectInput(input);\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.serialize.Serialization:\nxxx=com.xxx.XxxSerialization\n\n"},"impls/remoting.html":{"url":"impls/remoting.html","title":"5.17 Remoting","keywords":"","body":"Transporter Extension\nSummary\nTransportation extension for communication between server and client.\nExtension Interface\n\ncom.alibaba.dubbo.remoting.Transporter\ncom.alibaba.dubbo.remoting.Server\ncom.alibaba.dubbo.remoting.Client\n\nExtension Configuration\n\n \n\n \n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.remoting.transport.transporter.netty.NettyTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.mina.MinaTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.grizzly.GrizzlyTransporter\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTransporter.java (Transporter implementation)\n                |-XxxServer.java (Server implementation)\n                |-XxxClient.java (Client implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Transporter (plain text file with the content: xxx=com.xxx.XxxTransporter)\nXxxTransporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Transporter;\n\npublic class XxxTransporter implements Transporter {\n    public Server bind(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxServer(url, handler);\n    }\n    public Client connect(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxClient(url, handler);\n    }\n}\n\nXxxServer.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractServer;\n\npublic class XxxServer extends AbstractServer {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    public Collection getChannels() {\n        // ...\n    }\n    public Channel getChannel(InetSocketAddress remoteAddress) {\n        // ...\n    }\n}\n\nXxxClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractClient;\n\npublic class XxxClient extends AbstractClient {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    protected void doConnect() throws Throwable {\n        // ...\n    }\n    public Channel getChannel() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Transporter:\nxxx=com.xxx.XxxTransporter\n\n"},"impls/exchanger.html":{"url":"impls/exchanger.html","title":"5.18 Exchanger","keywords":"","body":"Exchanger Extension\nSummary\nExchange message between request and response on network transport layer.\nExtension Interface\n\ncom.alibaba.dubbo.remoting.exchange.Exchanger\ncom.alibaba.dubbo.remoting.exchange.ExchangeServer\ncom.alibaba.dubbo.remoting.exchange.ExchangeClient\n\nExtension Configuration\n\n -->\n\n\nExisting Extension\ncom.alibaba.dubbo.remoting.exchange.exchanger.HeaderExchanger\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExchanger.java (Exchanger implementation)\n                |-XxxExchangeServer.java (ExchangeServer implementation)\n                |-XxxExchangeClient.java (ExchangeClient implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.exchange.Exchanger (plain text file with the content: xxx=com.xxx.XxxExchanger)\nXxxExchanger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.Exchanger;\n\n\npublic class XxxExchanger implements Exchanger {\n    public ExchangeServer bind(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeServer(url, handler);\n    }\n    public ExchangeClient connect(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeClient(url, handler);\n    }\n}\n\nXxxExchangeServer.java:\n\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeServer;\n\npublic class XxxExchangeServer impelements ExchangeServer {\n    // ...\n}\n\nXxxExchangeClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeClient;\n\npublic class XxxExchangeClient impelments ExchangeClient {\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.exchange.Exchanger:\nxxx=com.xxx.XxxExchanger\n\n"},"impls/networker.html":{"url":"impls/networker.html","title":"5.19 Networker","keywords":"","body":"Networker Extension\nSummary\nExtension for peer to peer network grouping.\nExtension Interface\ncom.alibaba.dubbo.remoting.p2p.Networker\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.remoting.p2p.support.MulticastNetworker\ncom.alibaba.dubbo.remoting.p2p.support.FileNetworker\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxNetworker.java (Networker implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.p2p.Networker (plain text file with the content: xxx=com.xxx.XxxNetworker)\nXxxNetworker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.p2p.Networker;\n\npublic class XxxNetworker implements Networker {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.p2p.Networker:\nxxx=com.xxx.XxxNetworker\n\n"},"impls/telnet-handler.html":{"url":"impls/telnet-handler.html","title":"5.20 TelnetHandler","keywords":"","body":"TelnetHandler Extension\nSummary\nExtension to telnet command. All server should support telnet access for operation convenience.\nExtension Interface\ncom.alibaba.dubbo.remoting.telnet.TelnetHandler\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.remoting.telnet.support.ClearTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.ExitTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.HelpTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.StatusTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ListTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ChangeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CurrentTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.InvokeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.TraceTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CountTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.PortTelnetHandler\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTelnetHandler.java (TelnetHandler implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.telnet.TelnetHandler (plain text file with the content: xxx=com.xxx.XxxTelnetHandler)\nXxxTelnetHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.telnet.TelnetHandler;\n\n@Help(parameter=\"...\", summary=\"...\", detail=\"...\")\n\npublic class XxxTelnetHandler implements TelnetHandler {\n    public String telnet(Channel channel, String message) throws RemotingException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.telnet.TelnetHandler:\nxxx=com.xxx.XxxTelnetHandler\n\n用法\ntelnet 127.0.0.1 20880\ndubbo> xxx args\n\n"},"impls/status-checker.html":{"url":"impls/status-checker.html","title":"5.21 StatusChecker","keywords":"","body":"StatusChecker Extension\nSummary\nExtension to check status of resources service depends on. This status checker can be used in both telnet status command and status page.\nExtension Interface\ncom.alibaba.dubbo.common.status.StatusChecker\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.status.support.MemoryStatusChecker\ncom.alibaba.dubbo.common.status.support.LoadStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ServerStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ThreadPoolStatusChecker\ncom.alibaba.dubbo.registry.directory.RegistryStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.SpringStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.DataSourceStatusChecker\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxStatusChecker.java (StatusChecker implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.status.StatusChecker (plain text file with the content: xxx=com.xxx.XxxStatusChecker)\nXxxStatusChecker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.status.StatusChecker;\n\npublic class XxxStatusChecker implements StatusChecker {\n    public Status check() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.status.StatusChecker:\nxxx=com.xxx.XxxStatusChecker\n\n"},"impls/container.html":{"url":"impls/container.html","title":"5.22 Container","keywords":"","body":"Container Extension\nSummary\nService container extension, useful for loading custom contents.\nExtension Interface\ncom.alibaba.dubbo.container.Container\nExtension Configuration\njava com.alibaba.dubbo.container.Main spring jetty log4j\n\nExisting Extensions\n\ncom.alibaba.dubbo.container.spring.SpringContainer\ncom.alibaba.dubbo.container.spring.JettyContainer\ncom.alibaba.dubbo.container.spring.Log4jContainer\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxContainer.java (Container implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.Container (plain text file with the content: xxx=com.xxx.XxxContainer)\nXxxContainer.java:\npackage com.xxx;\n\ncom.alibaba.dubbo.container.Container;\n\n\npublic class XxxContainer implements Container {\n    public Status start() {\n        // ...\n    }\n    public Status stop() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.Container:\nxxx=com.xxx.XxxContainer\n\n"},"impls/page.html":{"url":"impls/page.html","title":"5.23 PageHandler","keywords":"","body":"Page Extension\nSummary\nExtension for page handler\nExtension Interface\ncom.alibaba.dubbo.container.page.PageHandler\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.container.page.pages.HomePageHandler\ncom.alibaba.dubbo.container.page.pages.StatusPageHandler\ncom.alibaba.dubbo.container.page.pages.LogPageHandler\ncom.alibaba.dubbo.container.page.pages.SystemPageHandler\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxPageHandler.java (PageHandler implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.page.PageHandler (plain text file with the content: xxx=com.xxx.XxxPageHandler)\nXxxPageHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.container.page.PageHandler;\n\npublic class XxxPageHandler implements PageHandler {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.page.PageHandler:\nxxx=com.xxx.XxxPageHandler\n\n"},"impls/cache.html":{"url":"impls/cache.html","title":"5.24 Cache","keywords":"","body":"Cache Extension\nSummary\nCache the return value, use request parameter as the key.\nExtension Interface\ncom.alibaba.dubbo.cache.CacheFactory\nExtension Configuration\n\n\n \n没有配置cache属性时,使用此配置 -->\n -->\n\n\nExisting Extensions\n\ncom.alibaba.dubbo.cache.support.lru.LruCacheFactory\ncom.alibaba.dubbo.cache.support.threadlocal.ThreadLocalCacheFactory\ncom.alibaba.dubbo.cache.support.jcache.JCacheFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCacheFactory.java (CacheFactory implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.cache.CacheFactory (plain text file with contents: xxx=com.xxx.XxxCacheFactory)\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.CacheFactory;\n\npublic class XxxCacheFactory implements CacheFactory {\n    public Cache getCache(URL url, String name) {\n        return new XxxCache(url, name);\n    }\n}\n\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.Cache;\n\npublic class XxxCache implements Cache {\n    public Cache(URL url, String name) {\n        // ...\n    }\n    public void put(Object key, Object value) {\n        // ...\n    }\n    public Object get(Object key) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.cache.CacheFactory:\nxxx=com.xxx.XxxCacheFactory\n\n"},"impls/validation.html":{"url":"impls/validation.html","title":"5.25 Validation","keywords":"","body":"Validation Extension\nSummary\nExtension for parameter validation.\nExtension Inteface\ncom.alibaba.dubbo.validation.Validation\nExtension Configuration\n\n -->\n\n\nExisting Extension\ncom.alibaba.dubbo.validation.support.jvalidation.JValidation\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxValidation.java (Validation implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.validation.Validation (plain text file with the content: xxx=com.xxx.XxxValidation)\nXxxValidation.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validation;\n\npublic class XxxValidation implements Validation {\n    public Object getValidator(URL url) {\n        // ...\n    }\n}\n\nXxxValidator.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validator;\n\npublic class XxxValidator implements Validator {\n    public XxxValidator(URL url) {\n        // ...\n    }\n    public void validate(Invocation invocation) throws Exception {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.validation.Validation:\nxxx=com.xxx.XxxValidation\n\n"},"impls/logger-adapter.html":{"url":"impls/logger-adapter.html","title":"5.26 LoggerAdapter","keywords":"","body":"LoggerAdapter Extension\nSummary\nExtension for adapting logger output\nExtension Interface\ncom.alibaba.dubbo.common.logger.LoggerAdapter\nExtension Configuration\n\n\nOr:\n-Ddubbo:application.logger=xxx\n\nExisting Extension\n\ncom.alibaba.dubbo.common.logger.slf4j.Slf4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jcl.JclLoggerAdapter\ncom.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jdk.JdkLoggerAdapter\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoggerAdapter.java (LoggerAdapter implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.logger.LoggerAdapter (plain text file with the content: xxx=com.xxx.XxxLoggerAdapter)\nXxxLoggerAdapter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.LoggerAdapter;\n\npublic class XxxLoggerAdapter implements LoggerAdapter {\n    public Logger getLogger(URL url) {\n        // ...\n    }\n}\n\nXxxLogger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.Logger;\n\npublic class XxxLogger implements Logger {\n    public XxxLogger(URL url) {\n        // ...\n    }\n    public void info(String msg) {\n        // ...\n    }\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.logger.LoggerAdapter:\nxxx=com.xxx.XxxLoggerAdapter\n\n"},"release.html":{"url":"release.html","title":"9 Versions","keywords":"","body":"Versions\nNew feature development and stability improvement are equally important to product. But adding new features will affect stability, dubbo uses the following version development pattern to achieve a good balance.\nTwo versions evolving at the same time\n\nBugFix Version:low version,e.g. 2.4.x. This is called the GA version, which can be applied in production. We are supposed only to fix bugs in this version, and increase the third version number when release.\nFeature Version:high version, e.g. 2.5.x. We add new features to this version, so applications have opportunities try new features.\n\nWhen features in 2.5.x are proved stable enough, we will announce 2.5.x as a beta release. \nWhen 2.5.x proved stable after enough test on enough applications:\n\n2.5.x, the GA Version, only do BugFix, the main version to be used. We can try to promote applications to upgrade to GA at the desired time.\n2.4.x, no longer maintained. When bugs appear, applications have no choice but upgrade to the latest stable version- Sunset Clause\nWe create a new branch 2.6.0 based on 2.5.x for new features.\n\nPros\n\nGA Version are promised stable:\nonly BugFix\nGA Version got enough tests before promotion\n\n\nNew features can respond quickly in Feature Version and allow applications to try that\nSignificantly reduces development and maintenance costs \n\nThe responsibilities of users\nUsers should always keep in track with the GA Version, make sure all bugs were fixed.\nThere is a fake proposition: regular upgrades bring more risks. Here's the reasons:\n\nGA remains stable after a trial period.\nBugs find on GA will be fixed immediately.\nComparing with the on-need-upgrade (only upgrade when find a serious problem, and may span multiple versions), upgrade periodically can flat risk. Experienced a long cycle of large projects, students will have such an experience, the tripartite library version does not upgrade for a long time, the result of the problem had to upgrade to the new version (across multiple versions) a huge risk.\n\n"},"code-smell.html":{"url":"code-smell.html","title":"12 Code Smell","keywords":"","body":"Bad Smell\nUgly Dubbo design or implementation will be record here.\nURL Convertion\n1. Point to Point Service export and refer\nservice directly export:\nEXPORT(dubbo://provider-address/com.xxx.XxxService?version=1.0.0\")\nservice directly refer:\nREFER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n2. Export servie by registry\nexport service to registry:\nEXPORT(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&export=ENCODE(dubbo://provider-address/com.xxx.XxxService?version=1.0.0))\naccquire registry:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\nregistry service address:\nurl.getParameterAndDecoded(\"export\"))\nREGISTER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n3. Refer service from registry\nrefer service from registry:\nREFER(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&refer=ENCODE(version=1.0.0))\naccquire registry:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\nsubscribe service address:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nSUBSCRIBE(dubbo://registry-address/com.xxx.XxxService?version=1.0.0)\nnotify service address:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nNOTIFY(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n4. Registry push route rule\nregistry push route rule:\nNOTIFY(route://registry-address/com.xxx.XxxService?router=script&type=js&rule=ENCODE(function{...}))\naccquire routers:\nurl.setProtocol(url.getParameter(\"router\", \"script\"))\nGETROUTE(script://registry-address/com.xxx.XxxService?type=js&rule=ENCODE(function{...}))\n5. Load route rule from file\nload route rule from file:\nGETROUTE(file://path/file.js?router=script)\naccquire routers:\nurl.setProtocol(url.getParameter(\"router\", \"script\")).addParameter(\"type\", SUFFIX(file)).addParameter(\"rule\", READ(file))\nGETROUTE(script://path/file.js?type=js&rule=ENCODE(function{...}))\nInvoke parameters\n\npath      service path\ngroup    service group\nversion  service version\ndubbo   current dubbo release version\ntoken    verify token\ntimeout   invocation timeout\n\nSPI Loading\n1. SPI Auto Adaptive\nWhen ExtensionLoader loads SPI, It will check spi attributes(using set method) . If one attribute is SPI, ExtensionLoader  will load the SPI implementation. Auto injected object is an adaptive instance(proxy) ,because the real implementation is confirmed only in execution stage.。when adaptive spi is invoked, Dubbo will choose the real implementation and executes it. Dubbo choose the right implementation according to the parameters that the mehod defines.\nAll the inner SPIs that  Dubbo defines have the URL  parameter defined for the method invocation. Adaptive SPI uses URL to determine which implementation is needed. One specific Key and Value in the URL confirms the usage of the specific implementation, All these is done by adding @Adaptive  annotation.\n@Extension\npublic interface Car {\n    @Adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\", \"http://10.20.160.198/wiki/display/dubbo/transport.type\"})\n    public run(URL url, Type1 arg1, Type2 arg2);\n}\n\nFor the rules above,ExtensionLoader  will create a adaptive instance for each SPI injected.\nExtensionLoader generated adaptive classes  look like :\npackage ;\n\npublic class $Adpative implements  {\n    public () {\n        if(parameters containing URL Type?) using URL parameter\n        else if(method returns URL) using the return URL\n        # \n\n        if(URL accquired == null) {\n            throw new IllegalArgumentException(\"url == null\");\n        }\n\n        According to the Key order from @Adaptive annotation,get the Value from the URL as the real SPI name\n        if no value is found then use the default SPI implementation。If no SPI point, throw new IllegalStateException(\"Fail to get extension\");\n\n        Invoke the method using the spi and return the result.\n    }\n\n    public () {\n        throw new UnsupportedOperationException(\"is not adaptive method!\");\n    }\n}\n\n@Adaptive  annotation usage:\nIf no value is configed for those Keys in URL,default SPI implementation is used。For example ,String[] {\"key1\", \"key2\"},firstly Dubbo will look up value for key1 and use it as SPI name;if key1 value is not founded then look up for key2,if value of key2 is also not found ,then use default spi implementation. If no default implementation is configed, then the method will throw IllegalStateException。if not configed , then default implement is lower case of the interface class full package name. For Extension interface com.alibaba.dubbo.xxx.YyyInvokerWrapper , default value is new String[] {\"yyy.invoker.wrapper\"}\nCallback Function\n1. Parameter Callback\nmain theory : in the persistent connection for one consumer->provider,export a service in  Consumer side,provider  side can reversely call the instance in consumer side.\nImplement details:\n\nFor exchanging interface instance in transmition, auto export and auto refer is implemented in DubboCodec . Need to seperate business logic and codec logic.\nyou will need to judge whether needing callback when getting exporter from invocation,if needed, get the callback instance id from the attachments. By using this method, consumer side can implement the callback interface with different implementations.\n\n2. Event Notification\nmain theory : when Consumer  executing invoke method,judging if any configuration for  onreturn/onerror... put  the method for onreturn to the callback list of the async invocatioin.\nImplement details:parameters is passed using URL,but string-object is not supported for URL, so the method is stored in  staticMap,it needs to be optimized.\nLazy Connection\nDubboProtocol  specific features, default disabled\nWhen client creating proxy for server, do not establish TCP persistent connection at first, only init the connecton when data is needing transmision.\nThis feather will disable the connection retry policy , resend the data again(if connection is lost when sending data ,try to establish a new connection to send data)\nShare Connection\nDubboProtocol specific features, default enabled。\nJVM A export many services,JVM B  refer more than one services of A,Share Connection means those different services invocations between A and B uses the same TCP connection  to transmit data, reducing server connections.\nImplement details:when using share connection for the same address,you need pay more attention to the invoker's destroy action.on one hand, you should close the connection when all the invokers refering the same address is destroyed, on another hand ,you should not close the connection when not all of the invokers are destroyed. In design implementation, we uses a strategy called reference count , we create a connection called Lazy connection for exceptions not affacting business when closing the connection just in case.\nsticky policy\nwhen existing many providers and configing the sticky policy,invocation will be sent to the same provider as last invocation. Sticky Policy opens the lazy attribute of connection, for avoiding open useless connectons.\nprovider selecting logic\n\nexisting multi providers,firstly select by Loadbalance 。If the selected  provider is available ,then just doing the invocation\nIf the selected provider is not available in stage 1, then choose from the remaining ,if available then doing the inovation\nIf all providers are not available , rescan the list(not choosen invoker first),juding if any provider is available, if existing,doing the invocatiion.\nIf no available provider in stage 3, then the next invoker of the invoker of stage 1 will be choosen(if not the last one),avoiding collision.\n\n"},"TCK.html":{"url":"TCK.html","title":"13 TCK","keywords":"","body":"Compatibility test\nDubbo's protocol, communication, serialization, registry, load balancing and other SPI all offer alternative strategies for different application scenarios while our test cases are very scattered. Ours is always uncertain whether it can satisfy the complete contract of the extension point when users need to add a new implementation.     \nThus we need to use TCK (Technology Compatibility Kit) for the core extension points.  When users add a new implementaion, compatibility with the rest of the framework can be ensured with TCK. This can effectively improve the overall health and also facilitate the access of the third party extenders, which accelerates the maturity of the open source community.\nXingzhi from the open source community is already working on this part. His preliminary idea is to build a TCK framework for Dubbo drawing on the CDI-TCK of JBoss first, then realize the TCK implementing case of Dubbo. \nReference:http://docs.jboss.org/cdi/tck/reference/1.0.1-Final/html/introduction.html\nAnyone interested  is welcomed to work on this together. \nProtocol TCK\n\nTODO\n\nRegistry TCK\n\nTODO\n\n"}}}
\ No newline at end of file
+{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["book","build,","code","cover","design","dev","dive","dubbo","dubbo,","etc.","extension,","follow","introduct","mainli","principl","styles,","topics:","versio,"],"build.html":["${home}/.m2/repository,","1","1.5","1:","2.2.1","2:",">","abov","befor","below","blow:","branch","build","building:","c:\\document","check","checkout","classpath.","clean","click","clone","code","code.","command","command,","command:","configur","debug","declipse.workspace=/path/to/the/workspace/","defin","development,","dmaven.test.skip","dubbo","dubbo.git","dubbo/tags.","eclips","eclipse.","eclipse:configur","eclipse:eclips","export","featur","firstly,","follow","gener","git","https://github.com/apache/incub","id","ide.","idea","idea:idea","import","instal","intellij","jar","java","lastest","local","m2_repo","maintenance.","major","master","maven","maven_opts=","maven_optsshould","mvn","need","new","packag","path","point","prefer","project","reli","repositori","requirements:","settings\\.m2\\repositori","skip","sourc","source:jar","support","tag","test","through","tool.","under","unix","us","version","via","view","well:","window","workspac","xmx1024m","xx:maxpermsize=512m"],"design.html":["+","1","10","2","abstract","accord","actual","ad","address","affect","api,","architectur","area","arrow","assembl","associ","asynchron","asynchronous,","attent","backgroud","background","balance,","balancing,","base","belong","below:","between","black","blue","both","bottom","box","bridg","business,","call","call,","calling.","center","center,","centers.","chain","channel,","choos","class","class,","classes,","client","client,","cluster","cluster,","cluster.","codec","comminucation.","common","complet","concept","concept,","concepts,","concern","config","config,","consum","consumer,","contain","container,","convert","core","cycl","dash","defin","depend","dependence.","deploy","deployment,","descript","description:","design","details.","diagram","differ","directli","directory,","discovery,","disguis","disturbed,","divid","dividing:","domain","domain,","don't","draw","dubbo","dubbo,","dubbo.","dubbo:","dynam","each","encapsul","entiti","entranc","etc.","even","exchang","exchangechannel,","exchangeclient,","exchanger,","exchangeserv","execut","executable,","expand","export","exporter,","expos","exposur","extend","extens","extern","fault","features.","filter","format","framework","function","gener","global","green","grizzly,","hide","hold","imag","image,","image.","implement","implementation,","implementation.","implemet","includ","independ","inform","information,","inherited,","initi","initialization,","interact","interfac","interface,","interfaces,","interfaces.","intern","intuit","invoc","invocation.","invok","invoke,","invoker,","invoker.","it'","it,","keep","layer","layer,","layer.","layer:","layers,","layers.","left","life","light","line","list","load","loadbalance.","local","logic","look","main","make","manag","mani","map,","map:","mean","messag","method","microkernel","mina","mina,","model","modul","module,","module:","modules.","monitor","monitor,","monitorfactory,","monitorservic","more","mulipl","name,","need","netty,","node","node.","nodes,","objectinput,","objectoutput,","on","on.","over","overal","packag","parameters,","parent","pattern,microkernel","pay","place","plugin","plugin,","point","points,","principl","process","process,","protocol","protocol,","protocols,","provid","provider,","provider.","proxi","proxy,","proxyfactory.","purpl","purpos","reason","red","refer","reference,","referenceconfig","registr","registri","registry,","registry.","registryfactory,","registryservice.","relationship","remot","remov","replac","repres","request","respons","response,","result","reusabl","reuse.","reused,","right","rmi","rmi.","router,","routing,","rpc","rpc,","rpc.","run","running,","runtime,","runtime.","same","scenes,","self","semant","send","sequenc","serial","serialization,","server","server,","servic","service,","serviceconfig","serviceproxi","services.","session","show","side","side,","skelet","spi.","spring,","spring.","standlon","startdard","starting,","static","statist","still","strip","structure,","stub","subclass","such","synchron","text","threadpool","time","time,","times,","to:","togeth","tolerance,","tomcat/jboss","tools,","top,","topolog","track","transfer","transmission,","transmission.","transpar","transparent,","transport","transporter,","treat","triangl","turn","udp","understand","unity.","upper","url","url.","us","user","user.","usual","util","variabl","variou","view.","want","way","whole","work"],"SPI.html":["\"consumer\"","\"provider\"","\"provider\",","\"transport\"})","\"xxx\")","'s","(contain","(wheel",",",",but",",it",",we",".","...","...);","//","//...","//after","1.","1,place","2.","2:","3","=","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"server\",","abov","accquir","acitiv","act","activ","activated,for","activation,like:","ad","adapt","adaptive.","adaptive,th","add","annot","anoth","aop","aop,","appointment:","as:filter,","attribut","attribute)","auto","automat","below","bind(),adapt","bind(url","bring","bu","cache=\"lru\",auto","cachefilter。","cann't","car","carmak","carmaker、wheelmak","carmaker(car","cause.","channelhandl","chapter:","choos","chooses.","class","class,you","class.","classpath","class。","class。extensionload","class,us","client","code","codes:","collect","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.protocol;","com.alibaba.xxx;","condit","config","configur","configuration.","connect(url","contain","content","content:","copi","creat","definition.","demo,","demo:two","depen","depenc","depend","determin","dubbo","dynam","easili","enhanc","ensur","entiti","error","etc,multi","exampl","example:","example:standard","except","execut","executed.","executed,th","exist","explain","exportlistener,","extend","extens","extensionload","extern","fail","failed.for","featur","file","filenam","file,dubbo","file,not","file:meta","filter","firstli","fix","fixed,get","follow","for.","found","fulli","function","getname().","good","handler)","here","holder","impl","impl.refer();","impl;","implemenet","implement","implementation,","implementation.","implementation。it","implementation。th","implementation,if","implementation:","import","inf/dubbo/com.alibaba.dubbo.rpc.protocol,content:","inf/dubbo/ful","info","inform","information.","inherit","inject","instanc","instance,wrapp","instant","instructor","intefac","interfac","interface)","interface,but","invoc","invok","invokerlistener,","ioc","issu","it.","jar","jdk","jruby.jar","key","key.。such","key,if","know","known","labels,w","like:","line","load","logic","look","lost.","make","makecar()","makecar();","makecar(url","maker)","maker)、wheelmak","makewheel","makewheel();","makewheel(url","mani","member","merg","meta","method","missing,and","modul","module,al","more","move","multi","multipl","name","name,if","name.","name=th","name,fil","need","needed,","need。","never","new","note:spi","note:th","object","ofadapt","on","once.","oper","or:","outer","packag","paramet","parameter(or","paramtyp","pass","pattern(pleas","pattern:spi","point","powerful.","predefin","program","protocol","protocol)","protocol;","protocol,place","provid","provider,group","proxi","public","qualifi","question","question:how","racecar","racecar(wheel,","racecarmak","real","refer()","regard","relat","releas","remotingexception;","repres","resourc","return","rubi","ruby,","rubyscriptengin","safeti","same","scan","script","scriptengine,get","search","seper","server","setter","setter.","setwheelmaker(wheelmak","simpli","simplifi","singleton","source:","specif","spi","spi'","spi(servic","spi,","spi.","spi.extensionload","spis,","spis。newli","spi。a","spi。get","spi,dubbo","spi:","standard","statuscheck","such","support","tell","telnethandler,","text","this.wheelmak","thread","through","throw","time.","timecost","togeth","transport","type","type,extensionload","until","url","url)","url);","url,","url.get(\"wheel.type\")","url.url","url,aft","url,dynam","us","used.","user","valid","valu","value)","value,th","void","wast","way","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","whenextensionload","work","wrap","wrapper","xxx","xxx=com.alibaba.xxx.xxxprotocol","xxxfilter","xxxprotocol","xxxprotocol(protocol","xxxprotocolwrapp","{","}","↩","。the","),cach",",one",",setwheelmak",",the",",to"],"implementation.html":["\"","\"hello","(such","+","1,","1.","2","2,","2.","3,","3.","4","4,","4.","5","5.","=","abov","abstractproxyinvok","accord","actual","adapt","addit","address","agreement","all,","as:","attribut","auto","back","base","bean","befor","below","better","cach","call","chain,","chain.","class","class,","class.","classes,","client","client,","close","cluster","code","code,","code.","code:","commun","complet","concept","condit","config","connect","consum","consumpt","consumption.","consumption:","convert","correspond","creat","democlientact","demoservic","demoservice)","demoservice.sayhello(\"world\"","demoservice;","demoserviceimpl","describ","design","detail","differ","direct","direct,","discov","discoveri","disguis","dispatch","dispather:","domain","dubbo","dubbo.","dubbo.jar,","dubbo://","dubbo://servic","dubbobeandefinitionparser,","dubboinvoker,","dubbonamespacehandl","dubboprotocol","each","easi","encapsul","end","entir","everywher","exampl","example:","execution,","explain","export","export()","exporter,","exporter.","exporterlisten","expos","exposur","exposure:","extens","filter","filter,","find","first","first,","fixed,","format","function","gener","getinvok","header","header,","header.","hello","helloworld).","here","hessianrpcinvoker,","host/com.alibaba.dubbo.registry.registryservice?export=url.encode(\"dubbo://servic","host/com.alibaba.dubbo.registry.registryservice?refer=url.encode(\"consumer://consum","host/com.foo.fooservice?version=1.0.0\").","host/com.foo.fooservice?version=1.0.0\"),","host/com.foo.fooservice?version=1.0.0,","host/com.foo.fooservice?version=1.0.0.","i);","idea","identifi","imag","image),","image,","image.","implement","import","important.","includ","inf/spring.handl","init","init,","initi","initialization.","injvminvoker,","instanc","instance(such","instance,","interfac","introduc","invok","invoker,","invoker:","invokerlisten","it'","it.","itself.","jdk,","key","kind","label","layer","let'","list,","listen","lot","main","mainli","make","mani","mapping,","mechan","mechanism,","meet","message,","meta","method","mix","model","model,","monitor.","name)","name;","namespace.","network","new","next","object","object.","on","open","paramet","pars","part","pase","peopl","perform","permeat","place","point","point,","port","port:","previou","privat","process","process,","protocol","protocolfilterwrapp","protocollistenerwrapp","protocols,","provid","provider:","providers:","proxi","proxy.","proxyfactori","public","real","realli","receiv","reciev","red","ref","refer","refer()","reference.","referenceconfig","referenceconfig.get()","referenceconfig:","regist","registri","registry,","registry.","registry:","registry://","registry://registri","registryprotocol","remot","remoteexcept","request","request,","requir","resend","return","return.","rmi","rmi/dubbo/web","rmi:","rmiinvoker,","rmiprotocol","rpc","save","sayhello(str","search","section.","sent","serv","server","servic","service(e.g.","service,","serviceconfig","serviceconfig.export()","serviceconfig:","setdemoservice(demoservic","show","similar","simpl","singl","socket","specif","spring","spring,","start","start()","step,","string","such","tag","take","this.demoservic","thread","threadpool:","throw","transfer","transform","two","typic","up","url","url,","url.","us","user","variou","veri","void","webserviceinvok","work.","wrap","wrapper","xml","{","}","↩","如:helloworldimpl),"],"impls/introduction.html":["5","contributor","dubbo","extend","extens","functionality.","implement","integration,","interfac","it'","spi","system","us"],"impls/protocol.html":["(export","(invok","(plain","(protocol","*","*/","...","/**","//","1.","2.","3.","5.1",">","@param","@return","@throw","`export()`","`invoke()`","`invoker`","`refer()`","`refer()`.","abstract","abstractexport","abstractinvok","address","associ","busi","call","call,","call.","cancel","care","check=fals","class","com","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.xxx;","communication.","configur","connect","content:","contract:","convert","correspondingli","detail","directori","doinvoke(invoc","dubbo","dure","e.g.","effect","error","except","execut","exist","export","export()","export(invok","export,","export.","exporter,","extend","extens","fails.","file","framework","framework,","gener","get","guid","hide","idempotent,","implement","implementation)","implementation,","implementation.","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","info","instance.","interfac","interface.","introduc","invocation)","invok","invoke()","invoker)","ipc,","is,","it'","it.","it:","java","layer","layout:","local","logic","main","meta","method","more","moreover,","need","network","new","notes:","object","occupi","once.","others.","packag","pass","port","protect","protocol","protocol'","protocol,","provid","proxi","public","receiv","recov","refer","refer()","refer().","refer(class","remot","remotingexception{","request","requir","resourc","respons","return","rpc","rpccontext.getcontext().setremoteaddress();","rpcexcept","rpcexception;","same","save","send","servic","service'","service:","set","sharing,","side","speaking,","src","summari","super(invoker);","super(type,","super.unexport();","tcp","text","there'","throw","throwabl","tri","type","type,","unexport()","upper","url","url)","url);","url,","url.","us","user","void","which'","xxx","xxx=com.xxx.xxxprotocol","xxx=com.xxx.xxxprotocol)","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxprotocol","xxxprotocol.java","xxxprotocol.java:","{","|","}"],"impls/filter.html":["(filter","(plain","...","//","5.2","=","aaa,","accumul","added.","base","bbb","befor","both","built","chang","class","com","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","consid","consumer,","content:","contract:","correspond","count","default","default\"","default.","defin","delete.","directori","dubbo","example,","example:","exclu","exclud","execut","exist","extens","extension.","file","filter","filter,","filter.","filter=\"","filter=\"xxx,default,yyy\",","filters.","foo1","foo1\"","function","furthermore,","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.filter:","instead","intercept","interfac","introduc","invoc","invocation)","invoke(invok","invoked,","invoker,","invoker.invoke(invocation);","java","layout:","location.","main","mean","mechanism.","meta","method","moment,","more","order","override,","packag","penalti","provid","public","remot","repres","resourc","result","result;","return","rpcexcept","same","servic","special","src","summari","text","throw","time","togeth","too,","use:","user","valu","xxx","xxx=com.xxx.xxxfilt","xxx=com.xxx.xxxfilter)","xxxfilter","xxxfilter.java","xxxfilter.java:","yyi","yyy,","{","|","}",",xxx,"],"impls/invoker-listener.html":["(invokerlisten","(plain","...","//","5.3","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","destroyed(invok","directori","dubbo","event","exist","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","interfac","invoker)","invokerlisten","java","layout:","main","meta","packag","public","referenced.","referred(invok","resourc","rpcexcept","servic","src","summari","text","there'","throw","void","xxx","xxx=com.xxx.xxxinvokerlisten","xxx=com.xxx.xxxinvokerlistener)","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","{","|","}"],"impls/exporter-listener.html":["(exporterlisten","(plain","...","//","5.4","class","com","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","directori","dubbo","event","exist","exported(export","exported.","exporter)","exporterlisten","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","interfac","java","layout:","main","meta","packag","public","resourc","rpcexcept","servic","src","summari","text","there'","throw","unexported(export","void","xxx","xxx=com.xxx.xxxexporterlisten","xxx=com.xxx.xxxexporterlistener)","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","{","|","}"],"impls/cluster.html":["(cluster","(plain","...","//","5.5",">","abstractclusterinvoker(directory)","class","cluster","cluster,","com","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","directori","directory)","doinvoke(invoc","dubbo","exist","extens","file","group","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","interfac","invocation,","invok","invokers,","java","layout:","list>","loadbal","loadbalance)","main","merge(directori","meta","new","on","packag","provid","provider.","public","resourc","result","return","rpcexcept","servic","singl","src","summari","text","throw","treat","xxx","xxx=com.xxx.xxxclust","xxx=com.xxx.xxxcluster)","xxxcluster","xxxcluster.java","xxxcluster.java:","{","|","}","};"],"impls/router.html":["(loadbal","(plain","...","//","5.6","class","com","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","content:","directori","dubbo","exist","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","interfac","invoc","invocation)","invocation.","invokers,","java","layout:","list>","main","meta","on","packag","pick","provid","public","resourc","router","routerfactori","rpcexcept","select(list>","servic","src","summari","text","throw","xxx","xxx=com.xxx.xxxrouterfactori","xxx=com.xxx.xxxrouterfactory)","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","{","|","}"],"impls/load-balance.html":["(loadbal","(plain","...","//","5.7",">","class","com","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","fire","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","interfac","invoc","invocation)","invocation.","invok","invokers,","java","layout:","loadbal","main","meta","on","packag","pick","provid","public","resourc","rpcexcept","select(list>","servic","src","summari","text","throw","xxx","xxx=com.xxx.xxxloadbal","xxx=com.xxx.xxxloadbalance)","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","{","|","}"],"impls/merger.html":["(merger","(plain","...","//","5.8","aggreg","class","com","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","group.","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","interfac","java","layout:","main","merg","merge(t...","merger","meta","packag","public","resourc","result","results)","return","src","strategi","summari","t","text","xxx","xxx=com.xxx.xxxmerg","xxx=com.xxx.xxxmerger)","xxxmerger","xxxmerger.java","xxxmerger.java:","{","|","}"],"impls/registry.html":["\"*\"","(plain","(registri","(registryfactori","(usual","(with","*","*/","...","/**","//","1.","2.","3.","4.","5.","5.9","6.","7.",">","@param","@return","@see","accident","address,","against","allow","allowed,","alway","author","automat","backup","backup=10.20.153.10","by,","cach","cancel","categor","categori","category.","category=overrid","center)","chang","check","check=fals","class","classifier,","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}.","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}.","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.xxx;","comma,","compar","configur","connect","consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","consumers,","contain","content:","contract","data","default","differ","directori","discovery.","disk","dubbo","dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","dynamic=fals","e.g.:","each","empti","empty,","equival","etc.","event","exact","except","exist","expir","extend","extens","extract","fails.","failur","file","file=registry.cach","fire","first","found,","full","getregistry(url","group,","guarante","guid","happens.","honor","ignor","ignored.","illegalstateexcept","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","info","info,nul","instead","interfac","interface,","interface=*&group=*&version=*&classifier=*","interface=com.alibaba.foo.barservice&version=1.0.0","interfaces,","isn't","java","jitter","kept","legal","list","list,","list.","listen","listener)","listener);","listener,","local","lookup","lookup(url","lost","main","match","mean","meta","mode","monitor","need","network","never","new","note","notif","notifi","notification.","notifications,","notify(list","notify:","notifylisten","notifylistener.java:","null","null,","on","once.","order,","otherwis","otherwise,","overrid","packag","paramet","part","partial","particluar","particular","persist","perspect","pls.","possibl","previou","procedur","protocol","providers,","providers.","public","pull","push","push,","queri","query,","queu","quit","reboot","receiv","recov","refer","regist","register(url","registr","registri","registryfactori","registryfactory.java:","registryservic","registryservice.java:","remov","requir","resourc","result","result.","retri","return","rout","same","say:","separ","seper","sequenc","server","server,","server:","servic","service,","service.","service:","session","session=60000","set","set)","set,","set.","setup","simpli","singl","special","specifi","specified.","src","structure:","subscrib","subscribe(url","subscript","subscription,","summari","support","suppos","text","thread","thrown","time,","timeout","timeout=1000","toler","type","type,","type.","under","unregist","unregister(url","unsubscrib","unsubscribe(url","unsubscription,","until","upcom","uri","url","url)","url);","url,","url.","urls);","us","user","username:password","version","version,","versioning,","void","way,","which'","whole","wildcard","xxx","xxx=com.xxx.xxxregistryfactori","xxx=com.xxx.xxxregistryfactory)","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","{","{@link","|","}","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","订阅服务."],"impls/monitor.html":["(monitor","(monitorfactori","(plain","...","//","5.10","class","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.xxx;","configur","count(url","directori","dubbo","each","exist","extens","file","format:","getmonitor(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","interfac","invoc","invocation.","java","layout:","main","meta","monitor","monitorfactori","new","packag","public","resourc","return","servic","src","statistics)","summari","taken","text","time","url)","void","xxx","xxx=com.xxx.xxxmonitorfactori","xxx=com.xxx.xxxmonitorfactory)","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","{","|","}"],"impls/extension-factory.html":["(extensionfactori","(plain","...","//","5.11","class","com","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.xxx;","configur","content:","directori","dubbo","exist","extens","extensionfactori","extensions.","factori","file","getextension(class","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","interfac","java","layout:","load","main","meta","name)","object","packag","public","resourc","src","string","summari","text","type,","xxx","xxx=com.xxx.xxxextensionfactori","xxx=com.xxx.xxxextensionfactory)","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","{","|","}"],"impls/proxy-factory.html":["(plain","(proxyfactori","...","//","5.12",">","busi","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","configur","content:","convert","directori","dubbo","exist","extens","file","getinvoker(t","getproxy(invok","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","interfac","interface.","invok","invoker)","java","layout:","main","meta","packag","proxy,","proxyfactori","public","resourc","rpcexcept","src","summari","t","text","throw","type,","url","url)","xxx","xxx=com.xxx.xxxproxyfactori","xxx=com.xxx.xxxproxyfactory)","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","{","|","}"],"impls/compiler.html":["(compil","(plain","...","//","5.13","automat","byte","class","code","com","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.xxx;","compil","compiler,","configur","content:","directori","discov","dubbo","dynam","exist","extens","file","gener","getextension(class","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","interfac","invocation.","java","layout:","loaded.","main","meta","name)","object","packag","public","required,","resourc","rpc","src","string","summari","text","type,","us","xxx","xxx=com.xxx.xxxcompil","xxx=com.xxx.xxxcompiler)","xxxcompil","xxxcompiler.java","xxxcompiler.java:","{","|","}"],"impls/dispatcher.html":["(dispatch","(plain","...","//","5.14",">","class","com","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.xxx;","configur","content:","directori","dispatch","dubbo","exist","extens","file","group","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","interfac","java","layout:","lookup(url","main","meta","packag","pool","public","resourc","src","strategy.","summari","text","thread","url)","xxx","xxx=com.xxx.xxxdispatch","xxx=com.xxx.xxxdispatcher)","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","{","|","}"],"impls/threadpool.html":["(plain","(threadpool","...","//","5.15",">","busi","class","com","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.xxx;","configur","content:","directori","dubbo","execut","executor","exist","extens","file","getexecutor()","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","interfac","java","java.util.concurrent.executor;","layout:","logic","main","meta","need","on","packag","pool","provider.","public","receiv","request,","resourc","server","servic","src","strategi","summari","text","thread","threadpool","xxx","xxx=com.xxx.xxxthreadpool","xxx=com.xxx.xxxthreadpool)","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","{","|","}"],"impls/serialize.html":["(objectinput","(objectoutput","(plain","(serial","5.16",">","byte","class","code","com","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.xxx;","configur","content:","deserialize(paramet","directori","dubbo","exist","extens","file","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","input)","inputstream","interfac","ioexcept","java","layout:","main","meta","network,","new","object","objectinput","objectoutput","output)","outputstream","packag","parameters,","public","resourc","return","serial","serialize(paramet","src","stream","summari","text","throw","transport","versa.","vise","xxx","xxx=com.xxx.xxxseri","xxx=com.xxx.xxxserialization)","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxserial","xxxserialization.java","xxxserialization.java:","{","|","}"],"impls/remoting.html":["(client","(plain","(server","(transport","...","//","5.17",">","abstractcli","abstractserv","between","bind(url","channel","channelhandl","class","client","client.","collect","com","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.xxx;","commun","configur","connect(url","content:","directori","doclose()","doconnect()","doopen()","dubbo","exist","extend","extens","file","getchannel()","getchannel(inetsocketaddress","getchannels()","guid","handler)","handler);","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","interfac","java","layout:","main","meta","new","packag","protect","public","remot","remoteaddress)","remotingexcept","remotingexception{","resourc","return","server","src","summari","super(url,","text","throw","throwabl","transport","url,","void","xxx","xxx=com.xxx.xxxtransport","xxx=com.xxx.xxxtransporter)","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","{","|","}"],"impls/exchanger.html":["(exchang","(exchangecli","(exchangeserv","(plain","...","//","5.18",">","between","bind(url","class","com","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.xxx;","configur","connect(url","content:","directori","dubbo","exchang","exchangecli","exchangehandl","exchangeserv","exist","extens","file","guid","handler)","handler);","impel","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","interfac","java","layer.","layout:","main","messag","meta","network","new","packag","public","remotingexcept","request","resourc","respons","return","src","summari","text","throw","transport","url,","xxx","xxx=com.xxx.xxxexchang","xxx=com.xxx.xxxexchanger)","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","{","|","}"],"impls/networker.html":["(network","(plain","...","//","5.19",">","class","com","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","group","grouping.","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","interfac","java","layout:","lookup(url","main","meta","network","packag","peer","public","resourc","src","summari","text","url)","xxx","xxx=com.xxx.xxxnetwork","xxx=com.xxx.xxxnetworker)","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","{","|","}"],"impls/telnet-handler.html":["(plain","(telnethandl","...","//","127.0.0.1","20880","5.20",">","@help(parameter=\"...\",","access","arg","channel,","class","com","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.xxx;","command.","configur","content:","convenience.","detail=\"...\")","directori","dubbo","dubbo>","exist","extens","file","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","interfac","java","layout:","main","message)","meta","oper","packag","public","remotingexcept","resourc","server","src","string","summari","summary=\"...\",","support","telnet","telnet(channel","telnethandl","text","throw","xxx","xxx=com.xxx.xxxtelnethandl","xxx=com.xxx.xxxtelnethandler)","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","{","|","}","用法"],"impls/status-checker.html":["(plain","(statuscheck","...","//","5.21",">","both","check","check()","checker","class","com","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.xxx;","command","configur","content:","depend","directori","dubbo","exist","extens","file","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","interfac","java","layout:","main","meta","on.","packag","page.","public","resourc","servic","src","statu","statuscheck","summari","telnet","text","us","xxx","xxx=com.xxx.xxxstatuscheck","xxx=com.xxx.xxxstatuschecker)","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","{","|","}"],"impls/container.html":["(contain","(plain","...","//","5.22","class","com","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.xxx;","configur","contain","content:","contents.","custom","directori","dubbo","exist","extens","extension,","file","guid","implement","implementation)","inf","inf/dubbo/com.alibaba.dubbo.container.container:","interfac","java","jetti","layout:","load","log4j","main","meta","packag","public","resourc","servic","spring","src","start()","statu","stop()","summari","text","us","xxx","xxx=com.xxx.xxxcontain","xxx=com.xxx.xxxcontainer)","xxxcontain","xxxcontainer.java","xxxcontainer.java:","{","|","}"],"impls/page.html":["(pagehandl","(plain","...","//","5.23",">","class","com","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.xxx;","configur","content:","directori","dubbo","exist","extens","file","group","guid","handler","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","interfac","java","layout:","lookup(url","main","meta","packag","page","pagehandl","public","resourc","src","summari","text","url)","xxx","xxx=com.xxx.xxxpagehandl","xxx=com.xxx.xxxpagehandler)","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","{","|","}"],"impls/cache.html":["(cachefactori","(plain","...","//","5.24",">","cach","cache(url","cachefactori","class","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.xxx;","configur","contents:","directori","dubbo","exist","extens","file","get(object","getcache(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","interfac","java","key)","key,","key.","layout:","main","meta","name)","name);","new","object","packag","paramet","public","put(object","request","resourc","return","src","string","summari","text","url,","us","value)","value,","void","xxx","xxx=com.xxx.xxxcachefactori","xxx=com.xxx.xxxcachefactory)","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","{","|","}","没有配置cache属性时,使用此配置"],"impls/validation.html":["(plain","(valid","...","//","5.25",">","class","com","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.xxx;","configur","content:","directori","dubbo","except","exist","extens","file","getvalidator(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.validation.validation:","intefac","invocation)","java","layout:","main","meta","object","packag","paramet","public","resourc","src","summari","text","throw","url)","valid","validate(invoc","validation.","void","xxx","xxx=com.xxx.xxxvalid","xxx=com.xxx.xxxvalidation)","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","{","|","}"],"impls/logger-adapter.html":["(loggeradapt","(plain","...","//","5.26","adapt","class","com","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.xxx;","configur","content:","ddubbo:application.logger=xxx","directori","dubbo","exist","extens","file","getlogger(url","guid","implement","implementation)","import","inf","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","info(str","interfac","java","layout:","logger","loggeradapt","main","meta","msg)","or:","output","packag","public","resourc","src","summari","text","url)","void","xxx","xxx=com.xxx.xxxloggeradapt","xxx=com.xxx.xxxloggeradapter)","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","{","|","}"],"contract.html":["6","agreement","agreement,","alarm","compli","context","contract","design","document","dubbo","error","except","expect","extens","includ","inconsistency.","info","inform","it.","log","need","normal","parameter,","point","print","protocol://username:password@host:port/path?key=value&key=valu","public","recover","situation.","standard","state","status.","style:","system.","throughout","transient","unrecover","url","warn","whole"],"coding.html":["'","'.'","1.","2.","3.","3rd","7","abstact","abstractxxx.","action","address,","alarm,","aop","assert","auto","balance.","balancing,","base","befor","below","between","bridging,","camelcas","case","case.","caus","center","check","check.","class","class,","client","close","code","combin","comment","common","compatible.","complet","config","configur","context","conveni","convent","databas","dbunit","defin","depend","determin","dicard","differ","direct","display","divid","doc","don't","dubbo","dubbo,al","each","easymock","error","errorcod","except","exception.","extens","extension.","extensionload","extensionloader.","extern","factori","fail","final","follow","front,","function","gener","handler,","hessian","identifi","implement","includ","independ","info","inform","initi","inject","instead","integr","interfac","interface,","intern","invok","ioc","isavail","it.","java","javadoc","junit","keep","key","languag","larg","level","load","log","logic","logic.","logutil","long","loop","lowercas","main","make","map","mean","method","minim","modul","module,","modules.","monitor","more","multipl","mush","name","need","nest","net","normal.","object","on.","order","out","output.","packag","package,","packaging,","paramet","paramt","parent","pari","part","place","point","point.","points,","possible,","print","program","properti","protocol","proxi","proxy,","public","put","real","reason,","recovery,","registri","relationship","releas","repsonse,","resourc","reusabl","reverse.","rmi,","rpcexcept","run","safe","send","separ","server","similar","simplicity.","sourc","specifications:","speed","spi,","split","spring","style","style.","sub","subpackag","subpackage,","such","suggestion:","summari","support","support.","teardown","test","testing,","testing.","testng","throw","thrown,","time","timer","tool","transfer","tri","try...fin","type","types,","under","unifi","unit","url","us","user.","valu","varieti","version","wait","warn","weekly.","word","write","xxxwrapper,bas","↩"],"release.html":["(across","(onli","2.4.x,","2.4.x.","2.5.x","2.5.x,","2.5.x.","2.6.0","9","achiev","ad","add","affect","allow","alway","announc","appear,","appli","applic","applications:","balance.","base","befor","beta","branch","bring","bug","bugfix","bugfix,","call","choic","claus","compar","cost","creat","cycl","desir","develop","dubbo","e.g.","enough","enough,","equal","evolv","experienc","experience,","fake","featur","features.","find","fix","fixed.","flat","follow","ga","good","here'","huge","immediately.","import","improv","increas","keep","larg","latest","librari","long","longer","main","maintained.","mainten","make","more","multipl","need","new","number","opportun","pattern","period","period.","pro","problem","problem,","product.","production.","projects,","promis","promot","proposition:","prove","quickli","reasons:","reduc","regular","release.","remain","respond","respons","result","risk.","risks.","same","seriou","significantli","span","stabil","stability,","stabl","stable:","student","such","sunset","suppos","sure","test","third","time","time,","time.","track","tri","trial","tripartit","two","upgrad","us","used.","user","version","version,","versions)","versions),","version,e.g.","version:high","version:low"],"contribution.html":["!important;","#dedede;","#efefef;","'tabl",".tabl","0","0%","02","04","10","100%;","10px;","15px","1px","20%","2012","27","30","35px;","65em;","90%","=","[].slice.call(document.queryselectorall('table')).foreach(function(el){","ac","ad","agent","align:","area","area';","auto;","avro","background:","benchmark","black","bold;","border","border:","box","bug","cacti","cells:","center","cglib","changing.","child(1)","child(2n)","claim","claimer","collapse:","collapse;","compat","complet","contribut","depend","deploy","develop","direct","distribut","document","document.createelement('div');","done","dubbo","dynam","el);","el.parentnode.insertbefore(wrapper,","el.parentnode.removechild(el);","empti","expans","extens","extension.","fix","flow","font","fork","framework.","funcat","function","github","height:","high","ic","interceptor","jcr/jsr283","jms&activemq","jmx","jndi","jrobin","json","jsr140&slp","jsr181&cxf(webservice)","jsr311&jsr339(restfulwebservice)","jta/xa","ldap","local","logstash","low","manag","margin:","maven","max","modifi","monitor","nagio","new","nowrap;","overflow:","packag","padding:","pend","perform","plan","point","prioriti","progress","project,","protobuf","protocol","proxi","pull","registri","request","research","rgba(158,188,226,0.12);","rgba(158,188,226,0.2);","rpc","schedul","serial","show;","simpledeploy","simpleschedul","snmp","solid","space:","statu","subvers","tabl","task","tbodi","td","td:nth","test","text","th","th,","thrift","time","tr:hover","tr:nth","transact","translat","transmiss","type","uddi","unclaim","unit","var","weight:","white","width:","wrapper","wrapper.appendchild(el);","wrapper.classnam","xml","xsocket","{","}","})","朱启恒","白文志","罗立树","闾刚"],"checklist.html":["(normal","/","11","abnorm","befor","bigfix","bug","bugfix","chang","check","checklist","ci","code","comment","complet","creat","design","find","github","issu","javadoc","list","manag","mileston","process","process)","record","releas","respons","review","scope","test","travi","unit","version","version,"],"code-smell.html":["\"dubbo\"))","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},firstli","\"script\"))","\"script\")).addparameter(\"type\",","#","$adp","()",",",",becaus",",if",",then",",tri",",you",".","1","1,","1.","12","2.","3,","3.","4.","5.",";","==",">provider,export","@adapt","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@extens","above,extensionload","accord","accquir","action.on","ad","adapt","address","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","address,y","address:","affact","again(if","annot","annotation.","annotation,get","anoth","arg1,","arg2);","async","attachments.","attent","attribut","attributes(us","auto","avail","available,","avoid","a,shar","b","bad","between","busi","call","callback","car","case","case.","check","choos","choosen","choosen(if","class","client","close","code","codec","collision.","com.alibaba.dubbo.xxx.yyyinvokerwrapp","config","configed,","configur","confirm","connect","connection,","connections.","connecton","connectons.","consum","contain","convert","count","creat","current","data","data)","data,","default","defin","defines.","design","destroy","destroyed,","destroyed.","details:","details:paramet","details:when","determin","differ","directli","disabl","do","done","dubbo","dubbocodec","dubboprotocol","each","enabled。","establish","event","exampl","except","exchang","execut","exist","existing,do","export","export(dubbo://provid","export(registry://registri","export:","extens","extension\");","extensionload","feather","features,","file","file:","first),jud","first,","found","full","function","gener","get","getregistry(dubbo://registri","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","group","hand","hand,","here.","id","if(method","if(paramet","if(url","illegalargumentexception(\"url","illegalstateexception(\"fail","illegalstateexception。if","implement","implementation,","implementation.","implementations.","implementation。if","init","inject","injected.","inner","inov","instanc","instance(proxy)","interfac","invoc","invocatiion.","invocatioin.","invocation.","invocation,if","invok","invoked,","invoker'","it.","judg","jvm","key","key1","key2","key2,if","last","lazi","list","list(not","load","loadbal","logic","logic.","look","lost","lower","main","mani","mean","mehod","method","method!\");","method)","method,","method,judg","more","multi","name","name.","name;if","need","needed,","needed.","new","next","notif","notifi","notify(dubbo://provid","notify(route://registri","null\");","null)","object","on","one),avoid","onreturn","onreturn/onerror...","open","optimized.","order","packag","paramet","pass","path","pay","persist","point","point,","polici","policy,invoc","provid","providers,firstli","proxi","public","push","put","read(file))","real","record","reduc","refer","refer(dubbo://provid","refer(registry://registri","refer:","register(dubbo://provid","registri","registry:","releas","remain","rescan","resend","result.","retri","return","revers","right","rout","routers:","rule","rule:","run(url","same","select","send","sent","seper","server","server,","servi","servic","services,jvm","set","share","side","side.","side,provid","smell","specif","spi","spi,","stage","stage.。when","staticmap,it","sticki","store","strategi","string","string[]","subscrib","subscribe(dubbo://registri","suffix(file)).addparameter(\"rule\",","support","tcp","theori","those","throw","timeout","token","transmision.","transmit","transmition,","type1","type2","type?)","ugli","unsupportedoperationexception(\"i","up","url","url)","url,","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","url,but","url,default","us","usag","usage:","used。for","useless","valu","verifi","version","whether","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","}","。if",",string[]",":"],"TCK.html":["(technolog","13","acceler","access","add","alreadi","altern","alway","anyon","applic","balanc","build","case","cdi","commun","communication,","community.","compat","complet","contract","core","differ","draw","dubbo","dubbo'","dubbo.","effect","ensur","extenders,","extens","facilit","final/html/introduction.html","first,","framework","health","idea","implement","implementaion,","implementation.","improv","interest","jboss","kit)","load","matur","need","new","offer","open","our","overal","part.","parti","point","points.","preliminari","protocol","protocol,","realiz","reference:http://docs.jboss.org/cdi/tck/reference/1.0.1","registri","registry,","rest","satisfi","scattered.","scenario","serialization,","sourc","spi","strategi","tck","tck.","test","third","thu","todo","together.","uncertain","us","user","veri","welcom","whether","work","xingzhi"]},"length":39},"tokenStore":{"root":{"0":{"2":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"4":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}},"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.07407407407407407}}}},"1":{"0":{"0":{"docs":{},"%":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"contribution.html":{"ref":"contribution.html","tf":5}},"p":{"docs":{},"x":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"1":{"docs":{"checklist.html":{"ref":"checklist.html","tf":5}}},"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"code-smell.html":{"ref":"code-smell.html","tf":3.333333333333333}}},"3":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5}}},"5":{"docs":{},"p":{"docs":{},"x":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"docs":{"build.html":{"ref":"build.html","tf":5},"design.html":{"ref":"design.html","tf":0.001282051282051282},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"5":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"coding.html":{"ref":"coding.html","tf":0.005249343832020997},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},",":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"p":{"docs":{},"x":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}},"2":{"0":{"1":{"2":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007407407407407408}}},"docs":{}},"8":{"8":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"docs":{}},"docs":{}},"docs":{},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"7":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}},"docs":{"design.html":{"ref":"design.html","tf":5.001282051282051},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}},".":{"2":{"docs":{},".":{"1":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"docs":{}}},"4":{"docs":{},".":{"docs":{},"x":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"5":{"docs":{},".":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"6":{"docs":{},".":{"0":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"docs":{}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"coding.html":{"ref":"coding.html","tf":0.005249343832020997},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"3":{"0":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"5":{"docs":{},"p":{"docs":{},"x":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":3.333333333333333}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"coding.html":{"ref":"coding.html","tf":0.005249343832020997},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"r":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"4":{"docs":{"implementation.html":{"ref":"implementation.html","tf":2.5}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"5":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.333333333333333}},".":{"1":{"0":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":5}}},"1":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5}}},"2":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5}}},"3":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5}}},"4":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5}}},"5":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5}}},"6":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":5}}},"7":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":5}}},"8":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5}}},"9":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":5}}},"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":5}}},"2":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":5}}},"1":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5}}},"2":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":5}}},"3":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5}}},"4":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":5}}},"5":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":5}}},"6":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5}}},"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":5}}},"3":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5}}},"4":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5}}},"5":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":5}}},"6":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5}}},"7":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5}}},"8":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5}}},"9":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":5}}},"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"6":{"5":{"docs":{},"e":{"docs":{},"m":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"docs":{"contract.html":{"ref":"contract.html","tf":5}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"7":{"docs":{"coding.html":{"ref":"coding.html","tf":3.333333333333333}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"9":{"0":{"docs":{},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}},"docs":{"release.html":{"ref":"release.html","tf":5}}},"docs":{},"b":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.1111111111111111}}}},"t":{"docs":{},"h":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"x":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"l":{"docs":{},"d":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}}}},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":5.050955414012739},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},",":{"docs":{"./":{"ref":"./","tf":0.05555555555555555}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}},"s":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},"g":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"e":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/filter.html":{"ref":"impls/filter.html","tf":0.015625},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135},"checklist.html":{"ref":"checklist.html","tf":0.061224489795918366}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.025477707006369428},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},":":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}},"n":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"t":{"docs":{},"w":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"a":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"a":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}}}},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"u":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.00641025641025641}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"i":{"docs":{},"d":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}},"n":{"docs":{},"g":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"n":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007407407407407408}}}}}}}}},"u":{"docs":{},"p":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}},"s":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.019490254872563718},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"coding.html":{"ref":"coding.html","tf":0.026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}}},"b":{"docs":{},"b":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}},"y":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"t":{"docs":{},"e":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"build.html":{"ref":"build.html","tf":0.03184713375796178},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"coding.html":{"ref":"coding.html","tf":3.3412073490813645},"checklist.html":{"ref":"checklist.html","tf":0.08163265306122448},"code-smell.html":{"ref":"code-smell.html","tf":3.333333333333333}},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"s":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.05555555555555555}}}}},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},":":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}},".":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},"u":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},"t":{"docs":{},"y":{"docs":{},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"i":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"TCK.html":{"ref":"TCK.html","tf":0.02912621359223301}},"i":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5.024096385542169}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776}}},"y":{"docs":{},";":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436}},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"2":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}},"docs":{}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},".":{"docs":{},"j":{"docs":{},"d":{"docs":{},"k":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666}}},"y":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"c":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"x":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198}}},"y":{"docs":{},";":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},".":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}},"p":{"docs":{},"c":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}},".":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"r":{"docs":{},"o":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357}}},"y":{"docs":{},";":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}},";":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"#":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"}":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"#":{"docs":{},"l":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},"}":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"y":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},".":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}},"r":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905}}},"y":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338}}}}}}},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.010256410256410256},"SPI.html":{"ref":"SPI.html","tf":0.011889035667107},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"u":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"r":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"r":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"p":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}},"i":{"docs":{},"d":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/container.html":{"ref":"impls/container.html","tf":5.035714285714286},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"s":{"docs":{},".":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}},"x":{"docs":{},"t":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}}},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":5.002469135802469}},"o":{"docs":{},"r":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185},"contract.html":{"ref":"contract.html","tf":5},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"n":{"docs":{},"i":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.013123359580052493}}}}}},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"code-smell.html":{"ref":"code-smell.html","tf":0.02242152466367713}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"o":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"e":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"i":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}},"s":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},":":{"docs":{},"\\":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}}}},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}},"(":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}},"e":{"docs":{},"r":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"checklist.html":{"ref":"checklist.html","tf":5.061224489795919}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.008974358974358974}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697}}}}}}}}}},"g":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"(":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"i":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"2":{"docs":{},"n":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"docs":{}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"SPI.html":{"ref":"SPI.html","tf":0.017173051519154558},"implementation.html":{"ref":"implementation.html","tf":0.008995502248875561},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"coding.html":{"ref":"coding.html","tf":0.023622047244094488},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0074962518740629685},"coding.html":{"ref":"coding.html","tf":0.005249343832020997}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},",":{"docs":{},"u":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"i":{"docs":{},"m":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"e":{"docs":{},"r":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"s":{"docs":{},"e":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.014102564102564103},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/cluster.html":{"ref":"impls/cluster.html","tf":5.017857142857143}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.02435897435897436},"implementation.html":{"ref":"implementation.html","tf":0.020989505247376312},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.008968609865470852}}}}}}}},"c":{"docs":{},"h":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/cache.html":{"ref":"impls/cache.html","tf":5.033333333333333}},"e":{"docs":{},"=":{"docs":{},"\"":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"\"":{"docs":{},",":{"docs":{},"a":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}},"t":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"n":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.009247027741083224}},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"e":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523}}}},"u":{"docs":{},"s":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"e":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872}}},"y":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"=":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"l":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}},"s":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"coding.html":{"ref":"coding.html","tf":0.005249343832020997},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.011538461538461539}}},"s":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"l":{"docs":{},"l":{"docs":{},"s":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"y":{"docs":{},"c":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"release.html":{"ref":"release.html","tf":0.004830917874396135},"checklist.html":{"ref":"checklist.html","tf":0.04081632653061224},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"i":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}},"d":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"design.html":{"ref":"design.html","tf":0.011538461538461539},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"contract.html":{"ref":"contract.html","tf":0.038461538461538464},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464}}}}}}}},"b":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}},"v":{"docs":{"./":{"ref":"./","tf":0.05555555555555555}},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"p":{"docs":{"release.html":{"ref":"release.html","tf":0.014492753623188406},"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"e":{"docs":{},".":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.026041666666666668},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266}},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}}}}},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.013493253373313344},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"s":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"m":{"docs":{},"o":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},":":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}},"e":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{},"s":{"docs":{},"a":{"docs":{},"y":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},"\"":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}}}}},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.05555555555555555}}},"i":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"l":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}},"s":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"b":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5.04054054054054}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"build.html":{"ref":"build.html","tf":0.03184713375796178},"design.html":{"ref":"design.html","tf":0.020512820512820513},"SPI.html":{"ref":"SPI.html","tf":0.011889035667107},"implementation.html":{"ref":"implementation.html","tf":0.013493253373313344},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.125},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"release.html":{"ref":"release.html","tf":0.004830917874396135},"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},",":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}},":":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375}}}}}}}}}}},"b":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0074962518740629685},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}},">":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},",":{"docs":{},"a":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"'":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"r":{"docs":{},"e":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"m":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}}}}}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464}}}},"t":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.01300578034682081},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"o":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464}}}}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"coding.html":{"ref":"coding.html","tf":0.007874015748031496}}}},"e":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}},"c":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}}},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}},".":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"'":{"docs":{},"d":{"docs":{},"i":{"docs":{},"v":{"docs":{},"'":{"docs":{},")":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"i":{"docs":{},"c":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},".":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},",":{"docs":{},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.015384615384615385},"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"implementation.html":{"ref":"implementation.html","tf":0.019490254872563718},"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.458333333333333},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/filter.html":{"ref":"impls/filter.html","tf":0.041666666666666664},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.05813953488372093},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.05813953488372093},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.044642857142857144},"impls/router.html":{"ref":"impls/router.html","tf":0.04938271604938271},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.05952380952380952},"impls/merger.html":{"ref":"impls/merger.html","tf":0.06756756756756757},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.05714285714285714},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.06944444444444445},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.054945054945054944},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.07228915662650602},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.06756756756756757},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.06896551724137931},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.05357142857142857},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.027906976744186046},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.08333333333333333},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.06060606060606061},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.06896551724137931},"impls/container.html":{"ref":"impls/container.html","tf":0.05952380952380952},"impls/page.html":{"ref":"impls/page.html","tf":0.08333333333333333},"impls/cache.html":{"ref":"impls/cache.html","tf":0.041666666666666664},"impls/validation.html":{"ref":"impls/validation.html","tf":0.061224489795918366},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05825242718446602},"contract.html":{"ref":"contract.html","tf":0.057692307692307696},"coding.html":{"ref":"coding.html","tf":0.01837270341207349},"contribution.html":{"ref":"contribution.html","tf":0.044444444444444446},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.009247027741083224},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5.027777777777778}}}}}}}}},"s":{"docs":{},".":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"r":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.010494752623688156},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"code-smell.html":{"ref":"code-smell.html","tf":0.008968609865470852}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5.023255813953488}}}}}}}},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372}}}},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}},".":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.008995502248875561}},"u":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375}},"e":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464}}},"s":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.014814814814814815}}}}},"l":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"i":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}},"r":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"e":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5.0227272727272725},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}}}}}}}}}},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.013123359580052493},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},"l":{"docs":{},"u":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"d":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.0066050198150594455},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"o":{"docs":{},"r":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/filter.html":{"ref":"impls/filter.html","tf":0.015625}}},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}},"e":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"s":{"docs":{},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"l":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"y":{"docs":{},"m":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},"n":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.007692307692307693},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"d":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"release.html":{"ref":"release.html","tf":0.014492753623188406}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"t":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"r":{"docs":{},"y":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.010498687664041995}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},".":{"docs":{},"g":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"release.html":{"ref":"release.html","tf":0.004830917874396135}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.011560693641618497}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"y":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"a":{"docs":{},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"l":{"docs":{},")":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"b":{"docs":{},"e":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"h":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375}},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"k":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"o":{"1":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}},"docs":{}},"n":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.033816425120772944}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"release.html":{"ref":"release.html","tf":0.00966183574879227}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},")":{"docs":{},",":{"docs":{},"j":{"docs":{},"u":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"e":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/filter.html":{"ref":"impls/filter.html","tf":5.052083333333333}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"=":{"docs":{},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}}}}}}},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0066050198150594455},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"=":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}},"x":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.00966183574879227},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"n":{"docs":{},"d":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"release.html":{"ref":"release.html","tf":0.00966183574879227},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}},"a":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"/":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"i":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"s":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"u":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"i":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"k":{"docs":{},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},".":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}}}}}}}}}}}},"a":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"l":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"r":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"o":{"docs":{},"w":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"t":{"docs":{"./":{"ref":"./","tf":10}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"j":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.011538461538461539},"SPI.html":{"ref":"SPI.html","tf":0.011889035667107},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"*":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"o":{"docs":{},"r":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}},"g":{"docs":{},"r":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007874015748031496}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}}}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707}}},"n":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"e":{"docs":{},",":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"(":{"docs":{},"s":{"docs":{},"u":{"docs":{},"c":{"docs":{},"h":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},"(":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"y":{"docs":{},".":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}},"f":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"r":{"docs":{},"m":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.010498687664041995}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},",":{"docs":{},"n":{"docs":{},"u":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},",":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}},"i":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":2.5}}}}},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}},",":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"i":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.011538461538461539},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.019490254872563718},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.030373831775700934},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5.023255813953488}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"s":{"docs":{},",":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}},"'":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"d":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"v":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"o":{"docs":{},"v":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},":":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.008995502248875561},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.026041666666666668},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.07142857142857142},"impls/router.html":{"ref":"impls/router.html","tf":0.04938271604938271},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.047619047619047616},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"release.html":{"ref":"release.html","tf":0.004830917874396135}},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"SPI.html":{"ref":"SPI.html","tf":0.026420079260237782},"implementation.html":{"ref":"implementation.html","tf":0.01649175412293853},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.016355140186915886},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"code-smell.html":{"ref":"code-smell.html","tf":0.02092675635276532},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"。":{"docs":{},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556}}}}},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"e":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"a":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.007692307692307693},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},")":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}},"m":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}}}},"t":{"docs":{},"'":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"o":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856}}}}}}}}},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"checklist.html":{"ref":"checklist.html","tf":0.04081632653061224}}}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}},")":{"docs":{},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"p":{"docs":{},"c":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"。":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"f":{"docs":{},"(":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"m":{"2":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}},"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"l":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.03184713375796178},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"_":{"docs":{},"o":{"docs":{},"p":{"docs":{},"t":{"docs":{},"s":{"docs":{},"=":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135}},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},")":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}},"n":{"docs":{},"a":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"contribution.html":{"ref":"contribution.html","tf":0.007407407407407408},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"p":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}},":":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"u":{"docs":{},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"r":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"x":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"v":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.03821656050955414}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"implementation.html":{"ref":"implementation.html","tf":0.017991004497751123},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.014018691588785047},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{},"j":{"docs":{},"u":{"docs":{},"d":{"docs":{},"g":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338}}}},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"r":{"docs":{},"g":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}},"t":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5.027027027027027}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"i":{"docs":{},"s":{"docs":{},"m":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.010494752623688156}}},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}},"e":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}}},"n":{"docs":{},"a":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},"i":{"docs":{},"m":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"x":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"u":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.00641025641025641},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},":":{"docs":{"design.html":{"ref":"design.html","tf":0.010256410256410256}}},"s":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},",":{"docs":{},"a":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.008974358974358974},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":5.038095238095238},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.014814814814814815}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"r":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}},"v":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"u":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"t":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"p":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"release.html":{"ref":"release.html","tf":0.00966183574879227}}}}}}},"s":{"docs":{},"h":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"s":{"docs":{},"g":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"./":{"ref":"./","tf":0.05555555555555555},"design.html":{"ref":"design.html","tf":0.0038461538461538464}}}}}},"t":{"docs":{"contract.html":{"ref":"contract.html","tf":0.057692307692307696},"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}},"v":{"docs":{},"i":{"docs":{},"o":{"docs":{},"u":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}},"o":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}},"s":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},",":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.01199400299850075},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":2.5}}},")":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.010256410256410256},"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"implementation.html":{"ref":"implementation.html","tf":2.5239880059970017},"impls/protocol.html":{"ref":"impls/protocol.html","tf":5.02803738317757},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.019753086419753086},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"@":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},":":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"?":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"=":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"&":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"=":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.023255813953488372}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.00641025641025641},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.026986506746626688},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436}}},",":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"s":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}}},"x":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.008974358974358974},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5.021978021978022}}}}}}}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007874015748031496}}}}}},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"o":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.022727272727272728},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"coding.html":{"ref":"coding.html","tf":0.005249343832020997},"contribution.html":{"ref":"contribution.html","tf":0.007407407407407408},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"e":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}},"t":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},",":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}}}}}},"(":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},":":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856}}}},"(":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},",":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"y":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"s":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.010494752623688156}}},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"u":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}}},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"i":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},"y":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"s":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"e":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"g":{"docs":{},"e":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776}},".":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5.013888888888889}}}}}}}}},"d":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.01649175412293853},"contract.html":{"ref":"contract.html","tf":0.057692307692307696},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.010498687664041995}}},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"r":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"b":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}}}}}}},"o":{"docs":{},"l":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}},"y":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},"n":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"u":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"s":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"u":{"docs":{},"r":{"docs":{},"p":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"o":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.023778071334214},"implementation.html":{"ref":"implementation.html","tf":0.0074962518740629685},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02102803738317757},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.026785714285714284},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.046511627906976744},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.03571428571428571},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.05},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05102040816326531},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.04854368932038835},"contract.html":{"ref":"contract.html","tf":0.038461538461538464},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}}}}}},"l":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"s":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.010498687664041995},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}},"e":{"docs":{},"o":{"docs":{},"p":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"r":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"m":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"i":{"docs":{},"o":{"docs":{},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"d":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.145679012345679}}}},"e":{"docs":{},"r":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":3.3359580052493434}},"s":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.05555555555555555}}}},":":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}},"r":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"d":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},",":{"docs":{},"i":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"s":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}},"u":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.05747126436781609},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5.022988505747127}}}}}}},".":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}},"e":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}},"b":{"docs":{},"i":{"docs":{},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454}},"e":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"g":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},".":{"docs":{},"。":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},"c":{"docs":{},"k":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}}},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"n":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"[":{"docs":{},"]":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"y":{"docs":{},".":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}},"u":{"docs":{},"b":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"e":{"docs":{},"p":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"o":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}},"r":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"e":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"\\":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"\\":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}},"docs":{}}}}}}}},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}}}}}}}}}},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"u":{"docs":{},"p":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"l":{"docs":{},"f":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},">":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"n":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/serialize.html":{"ref":"impls/serialize.html","tf":5.026785714285714},"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"v":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.026923076923076925},"implementation.html":{"ref":"implementation.html","tf":0.04047976011994003},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02102803738317757},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"code-smell.html":{"ref":"code-smell.html","tf":0.02242152466367713}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"s":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},",":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"(":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248}}}}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"=":{"6":{"0":{"0":{"0":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"a":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"build.html":{"ref":"build.html","tf":0.03821656050955414},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"e":{"docs":{},":":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"s":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}},"b":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}},"e":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"c":{"docs":{},"h":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"y":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}}},"n":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"r":{"docs":{},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}}}},"f":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"t":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"v":{"docs":{},"e":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"y":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"t":{"docs":{},"i":{"docs":{},"s":{"docs":{},"f":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"o":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}},"a":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}},"h":{"docs":{},"o":{"docs":{},"w":{"docs":{"design.html":{"ref":"design.html","tf":0.008974358974358974},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"f":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}},"i":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}}}}},"g":{"docs":{},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":3.3782474680757373},"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.458333333333333},"code-smell.html":{"ref":"code-smell.html","tf":0.02242152466367713},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"'":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"s":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"。":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"l":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"。":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"a":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}}},"e":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}}},"a":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}}}}},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.0625}},".":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}}},"r":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}},"n":{"docs":{},"m":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"m":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":3.334828101644245}}}}}}},"t":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.05555555555555555}}}}}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}}}},"o":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},".":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}},":":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"j":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"d":{"docs":{},"o":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}}}}},"a":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"k":{"docs":{},"e":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}},"n":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}},"b":{"docs":{},"l":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.01728395061728395}}}},"s":{"docs":{},"k":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"coding.html":{"ref":"coding.html","tf":0.01837270341207349},"release.html":{"ref":"release.html","tf":0.00966183574879227},"contribution.html":{"ref":"contribution.html","tf":0.014814814814814815},"checklist.html":{"ref":"checklist.html","tf":0.061224489795918366},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007874015748031496}}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007874015748031496}}}}}},"n":{"docs":{},"g":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"x":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"l":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.030303030303030304},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":5.02020202020202}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"g":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}}},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04186046511627907},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.023255813953488372}}}}},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.034482758620689655}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5.022988505747127}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}},"i":{"docs":{},"f":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}},"r":{"docs":{},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},",":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"u":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.01904761904761905},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.004830917874396135},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"c":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"=":{"1":{"0":{"0":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}},"r":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}}}},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"n":{"docs":{},"s":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"coding.html":{"ref":"coding.html","tf":0.010498687664041995}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}}}}}},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.00641025641025641},"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.013953488372093023},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}}},"v":{"docs":{},"i":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"coding.html":{"ref":"coding.html","tf":0.010498687664041995},"release.html":{"ref":"release.html","tf":0.014492753623188406}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"l":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}},"y":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},":":{"docs":{},"h":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"s":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}},"?":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"w":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"c":{"docs":{},"p":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"k":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5.058252427184466}},".":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"b":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"d":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},":":{"docs":{},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.05555555555555555}}},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":5.053140096618358},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.028985507246376812},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"s":{"docs":{},")":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},",":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},":":{"docs":{},"h":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}},"a":{"docs":{},".":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"f":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"i":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"e":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"s":{"docs":{},"e":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}},"a":{"docs":{},"r":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"i":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"o":{"docs":{},"u":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/validation.html":{"ref":"impls/validation.html","tf":5.030612244897959}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},"e":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/registry.html":{"ref":"impls/registry.html","tf":0.01300578034682081},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.023255813953488372},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},"$":{"docs":{},"{":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"}":{"docs":{},"/":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}}}}}}}}},"docs":{}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},">":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}},"a":{"docs":{},"b":{"docs":{},"o":{"docs":{},"v":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.013493253373313344}},"e":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.00641025641025641},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}}},"c":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}}}}}},"u":{"docs":{},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},",":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"l":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},".":{"docs":{},"o":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"h":{"docs":{},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.007874015748031496}}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"?":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"&":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"&":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"y":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}}}},"i":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"implementation.html":{"ref":"implementation.html","tf":0.01199400299850075},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},",":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"p":{"docs":{},"i":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},",":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"l":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.01932367149758454},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}}}}}}},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":5}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},"'":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}},"g":{"1":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"2":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"m":{"docs":{},"b":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}},"r":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"o":{"docs":{},"u":{"docs":{},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}}}}},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"e":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"s":{"docs":{},"(":{"docs":{},"u":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}},"n":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},",":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"o":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"y":{"docs":{},"o":{"docs":{},"n":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"o":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.013123359580052493}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}},"h":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"g":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"contract.html":{"ref":"contract.html","tf":0.019230769230769232}},",":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}}}}},"g":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"(":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"l":{"docs":{},"l":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"o":{"docs":{},"w":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.011560693641618497},"release.html":{"ref":"release.html","tf":0.004830917874396135}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606}}}}}}}},"w":{"docs":{},"a":{"docs":{},"y":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"release.html":{"ref":"release.html","tf":0.004830917874396135},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"a":{"docs":{},"r":{"docs":{},"m":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"a":{"docs":{},"a":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}},"v":{"docs":{},"r":{"docs":{},"o":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},",":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"design.html":{"ref":"design.html","tf":0.002564102564102564},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"checklist.html":{"ref":"checklist.html","tf":0.08163265306122448}}}}}}},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464}}}}},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},".":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"a":{"docs":{"release.html":{"ref":"release.html","tf":0.03864734299516908}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"b":{"docs":{"build.html":{"ref":"build.html","tf":0.01910828025477707}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"g":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.05185185185185185}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152}}}},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"'":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.008995502248875561}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"l":{"docs":{},"t":{"docs":{},"h":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},")":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"u":{"docs":{},"g":{"docs":{},"e":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"SPI.html":{"ref":"SPI.html","tf":0.007926023778071334}}},"v":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"coding.html":{"ref":"coding.html","tf":0.005249343832020997}},".":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}}}},"d":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}}}},"r":{"docs":{},"u":{"docs":{},"b":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"d":{"docs":{},"g":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"c":{"docs":{},"r":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"r":{"2":{"8":{"3":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"m":{"docs":{},"s":{"docs":{},"&":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"m":{"docs":{},"q":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}},"x":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"r":{"1":{"4":{"0":{"docs":{},"&":{"docs":{},"s":{"docs":{},"l":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"docs":{}},"8":{"1":{"docs":{},"&":{"docs":{},"c":{"docs":{},"x":{"docs":{},"f":{"docs":{},"(":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"3":{"1":{"1":{"docs":{},"&":{"docs":{},"j":{"docs":{},"s":{"docs":{},"r":{"3":{"3":{"9":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}},"docs":{}},"docs":{}},"docs":{}}},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"x":{"docs":{},"a":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"v":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.028205128205128206},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.010256410256410256}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}},":":{"docs":{"design.html":{"ref":"design.html","tf":0.011538461538461539}}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}},"b":{"docs":{},"e":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"s":{"docs":{},",":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"r":{"docs":{},"g":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"z":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}}},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"design.html":{"ref":"design.html","tf":0.002564102564102564},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"a":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.019815059445178335},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5.023809523809524},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}},"g":{"4":{"docs":{},"j":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}},"docs":{"contract.html":{"ref":"contract.html","tf":0.07692307692307693},"coding.html":{"ref":"coding.html","tf":0.026246719160104987}},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.02912621359223301}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5.019417475728155}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"o":{"docs":{},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"u":{"docs":{},"p":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}},"p":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"n":{"docs":{},"g":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"release.html":{"ref":"release.html","tf":0.00966183574879227}},"e":{"docs":{},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"w":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.02962962962962963}},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}}}}}}},"e":{"docs":{},"f":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}},"t":{"docs":{},"'":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"i":{"docs":{},"f":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}},"n":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.007692307692307693},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"s":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"e":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},">":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"(":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"k":{"docs":{},"e":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667}}}}},"b":{"docs":{},"r":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"n":{"docs":{},"e":{"docs":{},"e":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"design.html":{"ref":"design.html","tf":0.0038461538461538464},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.010498687664041995},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.008968609865470852},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357},"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"release.html":{"ref":"release.html","tf":0.03864734299516908},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}}},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"t":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":5.041666666666667}},",":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"x":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"s":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},"=":{"docs":{},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666}},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"s":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}},"t":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},":":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"t":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"s":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"i":{"docs":{},"f":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"m":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"r":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"a":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"h":{"docs":{},"i":{"docs":{},"p":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}}}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"e":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}}}},"d":{"docs":{},",":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}},"a":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"s":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"l":{"docs":{},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"i":{"docs":{},"z":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}},"d":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}},"u":{"docs":{},"c":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"f":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.01199400299850075},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.01046337817638266}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}}}}}}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}},"d":{"docs":{},".":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}},":":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"c":{"docs":{},"d":{"docs":{},"i":{"docs":{},"/":{"docs":{},"t":{"docs":{},"c":{"docs":{},"k":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"1":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008670520231213872}},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.008974358974358974},"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375},"impls/registry.html":{"ref":"impls/registry.html","tf":5.01878612716763},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"contribution.html":{"ref":"contribution.html","tf":0.009876543209876543},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"e":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"/":{"docs":{},"/":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}}}}}}}}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"u":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.011538461538461539},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.018691588785046728},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/remoting.html":{"ref":"impls/remoting.html","tf":5}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"{":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}}}}}}}}}}}}}}},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}},"v":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.00641025641025641},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"release.html":{"ref":"release.html","tf":0.004830917874396135},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/filter.html":{"ref":"impls/filter.html","tf":0.015625},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"release.html":{"ref":"release.html","tf":0.004830917874396135}},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"s":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"u":{"docs":{},"s":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"e":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"d":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.014018691588785047},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.017857142857142856},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"v":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"o":{"docs":{},"v":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"e":{"docs":{},"r":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}},"y":{"docs":{},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"r":{"docs":{},"d":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"i":{"docs":{},"e":{"docs":{},"w":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"s":{"docs":{},"k":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.00966183574879227}}},"s":{"docs":{},".":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}},"m":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},"e":{"docs":{},"r":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5.012345679012346}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}},"s":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},"p":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.011538461538461539},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.017857142857142856},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"coding.html":{"ref":"coding.html","tf":0.007874015748031496}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"b":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"y":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.005979073243647235}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}},"g":{"docs":{},"b":{"docs":{},"a":{"docs":{},"(":{"1":{"5":{"8":{"docs":{},",":{"1":{"8":{"8":{"docs":{},",":{"2":{"2":{"6":{"docs":{},",":{"0":{"docs":{},".":{"1":{"2":{"docs":{},")":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"docs":{}},"2":{"docs":{},")":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.012738853503184714},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"coding.html":{"ref":"coding.html","tf":0.005249343832020997}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}}},"i":{"docs":{},"x":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.013123359580052493},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358},"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}},"y":{"docs":{},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"f":{"docs":{},"i":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"i":{"docs":{},"m":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.07160493827160494}}}}}},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.03184713375796178},"design.html":{"ref":"design.html","tf":0.011538461538461539},"SPI.html":{"ref":"SPI.html","tf":0.007926023778071334},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.125},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"coding.html":{"ref":"coding.html","tf":0.03937007874015748},"release.html":{"ref":"release.html","tf":0.004830917874396135},"code-smell.html":{"ref":"code-smell.html","tf":0.017937219730941704},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"release.html":{"ref":"release.html","tf":0.00966183574879227},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}},"d":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"release.html":{"ref":"release.html","tf":0.004830917874396135}}},"。":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"a":{"docs":{},"g":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"e":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}},"d":{"docs":{},"p":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}},"d":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"p":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{"release.html":{"ref":"release.html","tf":0.03864734299516908}}}}}}},"r":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"implementation.html":{"ref":"implementation.html","tf":0.01199400299850075},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/registry.html":{"ref":"impls/registry.html","tf":0.024566473988439308},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"contract.html":{"ref":"contract.html","tf":0.07692307692307693},"coding.html":{"ref":"coding.html","tf":0.01837270341207349},"code-smell.html":{"ref":"code-smell.html","tf":0.01195814648729447}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.019417475728155338},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"implementation.html":{"ref":"implementation.html","tf":0.005997001499250375},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.018604651162790697},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},",":{"docs":{},"a":{"docs":{},"f":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"d":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"w":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}},"e":{"docs":{},"k":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},"l":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"SPI.html":{"ref":"SPI.html","tf":3.333333333333333},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007874015748031496}}}}},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}},"y":{"docs":{"design.html":{"ref":"design.html","tf":0.002564102564102564},"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"s":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"r":{"docs":{},"n":{"docs":{"contract.html":{"ref":"contract.html","tf":0.019230769230769232},"coding.html":{"ref":"coding.html","tf":0.005249343832020997}}}},"i":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}},"h":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"contract.html":{"ref":"contract.html","tf":0.019230769230769232}}}}},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112}},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.005284015852047556}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}},"i":{"docs":{},"c":{"docs":{},"h":{"docs":{},"'":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"t":{"docs":{},"e":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.01453104359313078},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}},".":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"x":{"docs":{},"m":{"docs":{},"x":{"1":{"0":{"2":{"4":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"x":{"docs":{},":":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"=":{"5":{"1":{"2":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.006369426751592357}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}},"x":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"y":{"docs":{},")":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}},"y":{"docs":{},")":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},"y":{"docs":{},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}},"y":{"docs":{},")":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}},"y":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"(":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.009302325581395349}},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.02040816326530612}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"z":{"docs":{},"h":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}},"+":{"docs":{"design.html":{"ref":"design.html","tf":0.0038461538461538464},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873}}},"k":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"coding.html":{"ref":"coding.html","tf":0.007874015748031496},"release.html":{"ref":"release.html","tf":0.004830917874396135}}}},"y":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},".":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}},"。":{"docs":{},"s":{"docs":{},"u":{"docs":{},"c":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},",":{"docs":{},"i":{"docs":{},"f":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}},"p":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}},"t":{"docs":{},")":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/cache.html":{"ref":"impls/cache.html","tf":0.016666666666666666},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}}}}}}}}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.008974358974358974},"SPI.html":{"ref":"SPI.html","tf":0.0066050198150594455},"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},".":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}},"c":{"docs":{},"e":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"e":{"docs":{},")":{"docs":{},",":{"docs":{},"a":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"/":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.001282051282051282}},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.005128205128205128},"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666}}}}}}},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},":":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.004497751124437781},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174},"TCK.html":{"ref":"TCK.html","tf":0.019417475728155338}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"u":{"docs":{},"n":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}},"r":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"coding.html":{"ref":"coding.html","tf":0.0026246719160104987},"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}},"u":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}},".":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}}}}},"r":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}},"c":{"docs":{},"c":{"docs":{},"u":{"docs":{},"p":{"docs":{},"i":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}},"w":{"docs":{},"i":{"docs":{},"s":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.004335260115606936}},"e":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}},"\"":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}},"*":{"docs":{},"\"":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"2":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{"coding.html":{"ref":"coding.html","tf":0.005249343832020997}},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},".":{"docs":{},"'":{"docs":{"coding.html":{"ref":"coding.html","tf":0.0026246719160104987}}}},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904}}}}}}},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338}}}}}}},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}},"s":{"docs":{},"u":{"docs":{},"c":{"docs":{},"h":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.011627906976744186},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.011627906976744186},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.007575757575757576},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.011904761904761904},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333},"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.01098901098901099}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.009708737864077669}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.004651162790697674}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"n":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.009708737864077669}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.008928571428571428}}}}}}}}}}}}},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888}}}}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.01020408163265306}}}}}}},"a":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.003963011889035667},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"u":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}},"i":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}},"w":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}}},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015852047556142668},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005780346820809248},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.037209302325581395},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.025},"impls/validation.html":{"ref":"impls/validation.html","tf":0.030612244897959183},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.038834951456310676}},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778}}}}}},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}},"/":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.02040816326530612}},"/":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.019815059445178335},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.007009345794392523},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.023255813953488372},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.023255813953488372},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428},"impls/router.html":{"ref":"impls/router.html","tf":0.012345679012345678},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.011904761904761904},"impls/merger.html":{"ref":"impls/merger.html","tf":0.013513513513513514},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0072254335260115606},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.009523809523809525},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.013888888888888888},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.02197802197802198},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.012048192771084338},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.013513513513513514},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.011494252873563218},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.037209302325581395},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.015151515151515152},"impls/networker.html":{"ref":"impls/networker.html","tf":0.013888888888888888},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.011494252873563218},"impls/container.html":{"ref":"impls/container.html","tf":0.023809523809523808},"impls/page.html":{"ref":"impls/page.html","tf":0.013888888888888888},"impls/cache.html":{"ref":"impls/cache.html","tf":0.025},"impls/validation.html":{"ref":"impls/validation.html","tf":0.030612244897959183},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.038834951456310676}},".":{"docs":{},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"a":{"docs":{},"f":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"*":{"docs":{},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}}}}},"=":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010568031704095112},"implementation.html":{"ref":"implementation.html","tf":0.0029985007496251873},"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333},"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}},"=":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0029895366218236174}}}},"@":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889},"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011682242990654205},"impls/registry.html":{"ref":"impls/registry.html","tf":0.01300578034682081}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}}}},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}},":":{"docs":{},"h":{"docs":{},"o":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}},"y":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}},"u":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}},"i":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{"release.html":{"ref":"release.html","tf":0.004830917874396135}}}}}}}}},"{":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.023778071334214},"implementation.html":{"ref":"implementation.html","tf":0.0074962518740629685},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.018691588785046728},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.03571428571428571},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.06046511627906977},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.03571428571428571},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.05},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05102040816326531},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.04854368932038835},"contribution.html":{"ref":"contribution.html","tf":0.01728395061728395},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},"@":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002890173410404624}}}}}}},"\"":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},"docs":{}}}},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},"}":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}}}}}}}}}}}}}}}}},"}":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.023778071334214},"implementation.html":{"ref":"implementation.html","tf":0.0074962518740629685},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02336448598130841},"impls/filter.html":{"ref":"impls/filter.html","tf":0.010416666666666666},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.03488372093023256},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.03488372093023256},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.026785714285714284},"impls/router.html":{"ref":"impls/router.html","tf":0.024691358024691357},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.023809523809523808},"impls/merger.html":{"ref":"impls/merger.html","tf":0.02702702702702703},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.0380952380952381},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.03296703296703297},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.024096385542168676},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.02702702702702703},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.022988505747126436},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.026785714285714284},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.06976744186046512},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.03787878787878788},"impls/networker.html":{"ref":"impls/networker.html","tf":0.027777777777777776},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.020202020202020204},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.022988505747126436},"impls/container.html":{"ref":"impls/container.html","tf":0.03571428571428571},"impls/page.html":{"ref":"impls/page.html","tf":0.027777777777777776},"impls/cache.html":{"ref":"impls/cache.html","tf":0.05},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05102040816326531},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.04854368932038835},"contribution.html":{"ref":"contribution.html","tf":0.01728395061728395},"code-smell.html":{"ref":"code-smell.html","tf":0.007473841554559043}},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.008928571428571428}}},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},"↩":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.002642007926023778},"implementation.html":{"ref":"implementation.html","tf":0.0074962518740629685},"coding.html":{"ref":"coding.html","tf":0.007874015748031496}}},"。":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"i":{"docs":{},"f":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}},")":{"docs":{},",":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}},",":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"[":{"docs":{},"]":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.001321003963011889}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}}},"如":{"docs":{},":":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},")":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0014992503748125937}}}}}}}}}}}}}}}}}}}},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.04439252336448598},"impls/registry.html":{"ref":"impls/registry.html","tf":0.0968208092485549}},"/":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682},"impls/registry.html":{"ref":"impls/registry.html","tf":0.010115606936416185}}}},"`":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.004672897196261682}}}}},"r":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.009345794392523364}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},"`":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}},".":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.002336448598130841}}}}}}}}}}}},"|":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.02570093457943925},"impls/filter.html":{"ref":"impls/filter.html","tf":0.046875},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.10465116279069768},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.10465116279069768},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.08035714285714286},"impls/router.html":{"ref":"impls/router.html","tf":0.1111111111111111},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.10714285714285714},"impls/merger.html":{"ref":"impls/merger.html","tf":0.12162162162162163},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014450867052023121},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.09523809523809523},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.125},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.0989010989010989},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.10843373493975904},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.12162162162162163},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.10344827586206896},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.09821428571428571},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.05116279069767442},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.08333333333333333},"impls/networker.html":{"ref":"impls/networker.html","tf":0.125},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.09090909090909091},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.10344827586206896},"impls/container.html":{"ref":"impls/container.html","tf":0.10714285714285714},"impls/page.html":{"ref":"impls/page.html","tf":0.125},"impls/cache.html":{"ref":"impls/cache.html","tf":0.075},"impls/validation.html":{"ref":"impls/validation.html","tf":0.09183673469387756},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.08737864077669903}}},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}},"y":{"docs":{},",":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.005208333333333333}}}}}},"查":{"docs":{},"询":{"docs":{},"注":{"docs":{},"册":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"与":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"的":{"docs":{},"推":{"docs":{},"模":{"docs":{},"式":{"docs":{},"相":{"docs":{},"对":{"docs":{},"应":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"为":{"docs":{},"拉":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"只":{"docs":{},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"次":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.001445086705202312}}}}}}},"用":{"docs":{},"法":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.010101010101010102}}}},"没":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.008333333333333333}}}}}}}}}}}}}}}}}}}},"!":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}},"#":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0049382716049382715}}}}}}}}},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"f":{"docs":{},";":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},".":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"'":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"'":{"docs":{},")":{"docs":{},")":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{},"{":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"朱":{"docs":{},"启":{"docs":{},"恒":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"白":{"docs":{},"文":{"docs":{},"志":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"罗":{"docs":{},"立":{"docs":{},"树":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}}},"闾":{"docs":{},"刚":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.0024691358024691358}}}},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0014947683109118087}}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.004484304932735426}}}},"length":4310},"corpusTokens":["!important;","\"","\"*\"","\"consumer\"","\"dubbo\"))","\"hello","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},firstli","\"provider\"","\"provider\",","\"script\"))","\"script\")).addparameter(\"type\",","\"transport\"})","\"xxx\")","#","#dedede;","#efefef;","$adp","${home}/.m2/repository,","'","'.'","'s","'tabl","()","(across","(cachefactori","(client","(cluster","(compil","(contain","(dispatch","(exchang","(exchangecli","(exchangeserv","(export","(exporterlisten","(extensionfactori","(filter","(invok","(invokerlisten","(loadbal","(loggeradapt","(merger","(monitor","(monitorfactori","(network","(normal","(objectinput","(objectoutput","(onli","(pagehandl","(plain","(protocol","(proxyfactori","(registri","(registryfactori","(serial","(server","(statuscheck","(such","(technolog","(telnethandl","(threadpool","(transport","(usual","(valid","(wheel","(with","*","*/","+",",",",becaus",",but",",if",",it",",then",",tri",",we",",you",".","...","...);",".tabl","/","/**","//","//...","//after","0","0%","02","04","1","1,","1.","1.5","10","100%;","10px;","11","12","127.0.0.1","13","15px","1:","1px","1,place","2","2,","2.","2.2.1","2.4.x,","2.4.x.","2.5.x","2.5.x,","2.5.x.","2.6.0","20%","2012","20880","27","2:","2:","3","3,","3.","30","35px;","3rd","4","4,","4.","5","5.","5.1","5.10","5.11","5.12","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.2","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.3","5.4","5.5","5.6","5.7","5.8","5.9","6","6.","65em;","7","7.","9","90%",";","=","==",">",">provider,export","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@adaptive({\"server\",","@extens","@help(parameter=\"...\",","@param","@return","@see","@throw","[].slice.call(document.queryselectorall('table')).foreach(function(el){","`export()`","`invoke()`","`invoker`","`refer()`","`refer()`.","aaa,","abnorm","abov","above,extensionload","abstact","abstract","abstractcli","abstractclusterinvoker(directory)","abstractexport","abstractinvok","abstractproxyinvok","abstractserv","abstractxxx.","ac","acceler","access","accident","accord","accquir","accumul","achiev","acitiv","act","action","action.on","activ","activated,for","activation,like:","actual","ad","adapt","adaptive.","adaptive,th","add","added.","addit","address","address,","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","address,y","address:","affact","affect","again(if","against","agent","aggreg","agreement","agreement,","alarm","alarm,","align:","all,","allow","allowed,","alreadi","altern","alway","annot","annotation.","annotation,get","announc","anoth","anyon","aop","aop,","api,","appear,","appli","applic","applications:","appointment:","architectur","area","area';","arg","arg1,","arg2);","arrow","as:","assembl","assert","associ","async","asynchron","asynchronous,","as:filter,","attachments.","attent","attribut","attributes(us","attribute)","author","auto","auto;","automat","avail","available,","avoid","avro","a,shar","b","back","backgroud","background","background:","backup","backup=10.20.153.10","bad","balanc","balance,","balance.","balancing,","base","bbb","bean","befor","belong","below","below:","benchmark","beta","better","between","bigfix","bind(),adapt","bind(url","black","blow:","blue","bold;","book","border","border:","both","bottom","box","branch","bridg","bridging,","bring","bu","bug","bugfix","bugfix,","build","build,","building:","built","busi","business,","by,","byte","c:\\document","cach","cache(url","cache=\"lru\",auto","cachefactori","cachefilter。","cacti","call","call,","call.","callback","calling.","camelcas","cancel","cann't","car","care","carmak","carmaker、wheelmak","carmaker(car","case","case.","categor","categori","category.","category=overrid","caus","cause.","cdi","cells:","center","center)","center,","centers.","cglib","chain","chain,","chain.","chang","changing.","channel","channel,","channelhandl","chapter:","check","check()","check.","check=fals","checker","checklist","checkout","child(1)","child(2n)","choic","choos","choosen","choosen(if","chooses.","ci","claim","claimer","class","class,","class,you","class.","classes,","classifier,","classpath","classpath.","class。","class。extensionload","class,us","claus","clean","click","client","client,","client.","clone","close","cluster","cluster,","cluster.","code","code,","code.","code:","codec","codes:","collapse:","collapse;","collect","collision.","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}.","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}.","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.rpcexception;","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.alibaba.dubbo.xxx.yyyinvokerwrapp","com.alibaba.xxx;","com.xxx;","combin","comma,","command","command,","command.","command:","comment","comminucation.","common","commun","communication,","communication.","community.","compar","compat","compatible.","compil","compiler,","complet","compli","concept","concept,","concepts,","concern","condit","config","config,","configed,","configur","configuration.","confirm","connect","connect(url","connection,","connections.","connecton","connectons.","consid","consum","consumer,","consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","consumers,","consumpt","consumption.","consumption:","contain","container,","content","content:","contents.","contents:","content:","context","contract","contract:","contribut","contributor","conveni","convenience.","convent","convert","copi","core","correspond","correspondingli","cost","count","count(url","cover","creat","current","custom","cycl","dash","data","data)","data,","databas","dbunit","ddubbo:application.logger=xxx","debug","declipse.workspace=/path/to/the/workspace/","default","default\"","default.","defin","defines.","definition.","delete.","demo,","democlientact","demoservic","demoservice)","demoservice.sayhello(\"world\"","demoservice;","demoserviceimpl","demo:two","depen","depenc","depend","dependence.","deploy","deployment,","describ","descript","description:","deserialize(paramet","design","desir","destroy","destroyed(invok","destroyed,","destroyed.","detail","detail=\"...\")","details.","details:","details:paramet","details:when","determin","dev","develop","development,","diagram","dicard","differ","direct","direct,","directli","directori","directory)","directory,","disabl","discov","discoveri","discovery,","discovery.","disguis","disk","dispatch","dispather:","display","distribut","disturbed,","dive","divid","dividing:","dmaven.test.skip","do","doc","doclose()","doconnect()","document","document.createelement('div');","doinvoke(invoc","domain","domain,","don't","done","doopen()","draw","dubbo","dubbo'","dubbo,","dubbo.","dubbo.git","dubbo.jar,","dubbo/tags.","dubbo:","dubbo://","dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","dubbo://servic","dubbo>","dubbobeandefinitionparser,","dubbocodec","dubboinvoker,","dubbonamespacehandl","dubboprotocol","dubbo,al","dure","dynam","dynamic=fals","e.g.","e.g.:","each","easi","easili","easymock","eclips","eclipse.","eclipse:configur","eclipse:eclips","effect","el);","el.parentnode.insertbefore(wrapper,","el.parentnode.removechild(el);","empti","empty,","enabled。","encapsul","end","enhanc","enough","enough,","ensur","entir","entiti","entranc","equal","equival","error","errorcod","establish","etc.","etc,multi","even","event","everywher","evolv","exact","exampl","example,","example:","example:","example:standard","except","exception.","exchang","exchangechannel,","exchangecli","exchangeclient,","exchangehandl","exchanger,","exchangeserv","exclu","exclud","execut","executable,","executed.","executed,th","execution,","executor","exist","existing,do","expand","expans","expect","experienc","experience,","expir","explain","export","export()","export(dubbo://provid","export(invok","export(registry://registri","export,","export.","exported(export","exported.","exporter)","exporter,","exporter.","exporterlisten","exportlistener,","export:","expos","exposur","exposure:","extend","extenders,","extens","extension\");","extension,","extension.","extensionfactori","extensionload","extensionloader.","extensions.","extern","extract","facilit","factori","fail","failed.for","fails.","failur","fake","fault","feather","featur","features,","features.","file","file=registry.cach","filenam","file,dubbo","file,not","file:","file:meta","filter","filter,","filter.","filter=\"","filter=\"xxx,default,yyy\",","filters.","final","final/html/introduction.html","find","fire","first","first),jud","first,","firstli","firstly,","fix","fixed,","fixed.","fixed,get","flat","flow","follow","font","foo1","foo1\"","for.","fork","format","format:","found","found,","framework","framework,","framework.","front,","full","fulli","funcat","function","functionality.","furthermore,","ga","gener","get","get(object","getcache(url","getchannel()","getchannel(inetsocketaddress","getchannels()","getexecutor()","getextension(class","getinvok","getinvoker(t","getlogger(url","getmonitor(url","getname().","getproxy(invok","getregistry(dubbo://registri","getregistry(url","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","getvalidator(url","git","github","global","good","green","grizzly,","group","group,","group.","grouping.","guarante","guid","hand","hand,","handler","handler)","handler);","handler,","happens.","header","header,","header.","health","height:","hello","helloworld).","here","here'","here.","hessian","hessianrpcinvoker,","hide","high","hold","holder","honor","host/com.alibaba.dubbo.registry.registryservice?export=url.encode(\"dubbo://servic","host/com.alibaba.dubbo.registry.registryservice?refer=url.encode(\"consumer://consum","host/com.foo.fooservice?version=1.0.0\").","host/com.foo.fooservice?version=1.0.0\"),","host/com.foo.fooservice?version=1.0.0,","host/com.foo.fooservice?version=1.0.0.","https://github.com/apache/incub","huge","i);","ic","id","ide.","idea","idea:idea","idempotent,","identifi","if(method","if(paramet","if(url","ignor","ignored.","illegalargumentexception(\"url","illegalstateexcept","illegalstateexception(\"fail","illegalstateexception。if","imag","image),","image,","image.","immediately.","impel","impl","impl.refer();","impl;","implemenet","implement","implementaion,","implementation)","implementation,","implementation.","implementations.","implementation。if","implementation。it","implementation。th","implementation,if","implementation:","implemet","import","important.","improv","includ","inconsistency.","increas","independ","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","inf/dubbo/com.alibaba.dubbo.container.container:","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","inf/dubbo/com.alibaba.dubbo.rpc.filter:","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","inf/dubbo/com.alibaba.dubbo.rpc.protocol,content:","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","inf/dubbo/com.alibaba.dubbo.validation.validation:","inf/dubbo/ful","inf/spring.handl","info","info(str","inform","information,","information.","info,nul","inherit","inherited,","init","init,","initi","initialization,","initialization.","inject","injected.","injvminvoker,","inner","inov","input)","inputstream","instal","instanc","instance(such","instance,","instance.","instance(proxy)","instance,wrapp","instant","instead","instructor","intefac","integr","integration,","intellij","interact","intercept","interceptor","interest","interfac","interface)","interface,","interface.","interface=*&group=*&version=*&classifier=*","interface=com.alibaba.foo.barservice&version=1.0.0","interfaces,","interfaces.","interface,but","intern","introduc","introduct","intuit","invoc","invocatiion.","invocatioin.","invocation)","invocation,","invocation.","invocation,if","invok","invoke()","invoke(invok","invoke,","invoked,","invoker'","invoker)","invoker,","invoker.","invoker.invoke(invocation);","invoker:","invokerlisten","invokerlistener,","invokers,","ioc","ioexcept","ipc,","is,","isavail","isn't","issu","it'","it,","it.","it:","itself.","jar","java","java.util.concurrent.executor;","javadoc","jboss","jcr/jsr283","jdk","jdk,","jetti","jitter","jms&activemq","jmx","jndi","jrobin","jruby.jar","json","jsr140&slp","jsr181&cxf(webservice)","jsr311&jsr339(restfulwebservice)","jta/xa","judg","junit","jvm","keep","kept","key","key)","key,","key.","key.。such","key1","key2","key2,if","key,if","kind","kit)","know","known","label","labels,w","languag","larg","last","lastest","latest","layer","layer,","layer.","layer:","layers,","layers.","layout:","lazi","ldap","left","legal","let'","level","librari","life","light","like:","line","list","list(not","list,","list.","list>","listen","listener)","listener);","listener,","load","loadbal","loadbalance)","loadbalance.","loaded.","local","location.","log","log4j","logger","loggeradapt","logic","logic.","logstash","logutil","long","longer","look","lookup","lookup(url","loop","lost","lost.","lot","low","lower","lowercas","m2_repo","main","mainli","maintained.","mainten","maintenance.","major","make","makecar()","makecar();","makecar(url","maker)","maker)、wheelmak","makewheel","makewheel();","makewheel(url","manag","mani","map","map,","map:","mapping,","margin:","master","match","matur","maven","maven_opts=","maven_optsshould","max","mean","mechan","mechanism,","mechanism.","meet","mehod","member","merg","merge(directori","merge(t...","merger","messag","message)","message,","meta","method","method!\");","method)","method,","method,judg","microkernel","mileston","mina","mina,","minim","missing,and","mix","mode","model","model,","modifi","modul","module,","module:","modules.","module,al","moment,","monitor","monitor,","monitor.","monitorfactori","monitorfactory,","monitorservic","more","moreover,","move","msg)","mulipl","multi","multipl","mush","mvn","nagio","name","name)","name);","name,","name,if","name.","name;","name;if","name=th","namespace.","name,fil","need","needed,","needed.","need。","nest","net","netty,","network","network,","never","new","next","node","node.","nodes,","normal","normal.","note","notes:","note:spi","note:th","notif","notifi","notification.","notifications,","notify(dubbo://provid","notify(list","notify(route://registri","notify:","notifylisten","notifylistener.java:","nowrap;","null","null\");","null)","null,","number","object","object.","objectinput","objectinput,","objectoutput","objectoutput,","occupi","ofadapt","offer","on","on.","once.","one),avoid","onreturn","onreturn/onerror...","open","oper","opportun","optimized.","or:","order","order,","or:","others.","otherwis","otherwise,","our","out","outer","output","output)","output.","outputstream","over","overal","overflow:","overrid","override,","packag","package,","packaging,","padding:","page","page.","pagehandl","paramet","parameter,","parameters,","parameter(or","paramt","paramtyp","parent","pari","pars","part","part.","parti","partial","particluar","particular","pase","pass","path","pattern","pattern(pleas","pattern,microkernel","pattern:spi","pay","peer","penalti","pend","peopl","perform","period","period.","permeat","persist","perspect","pick","place","plan","pls.","plugin","plugin,","point","point,","point.","points,","points.","point,","polici","policy,invoc","pool","port","port:","possibl","possible,","powerful.","predefin","prefer","preliminari","previou","principl","print","prioriti","privat","pro","problem","problem,","procedur","process","process)","process,","product.","production.","program","progress","project","project,","projects,","promis","promot","properti","proposition:","protect","protobuf","protocol","protocol'","protocol)","protocol,","protocol://username:password@host:port/path?key=value&key=valu","protocol;","protocolfilterwrapp","protocollistenerwrapp","protocols,","protocol,place","prove","provid","provider,","provider.","provider:","providers,","providers.","providers:","providers,firstli","provider,group","proxi","proxy,","proxy.","proxyfactori","proxyfactory.","public","pull","purpl","purpos","push","push,","put","put(object","qualifi","queri","query,","question","question:how","queu","quickli","quit","racecar","racecar(wheel,","racecarmak","read(file))","real","realiz","realli","reason","reason,","reasons:","reboot","receiv","reciev","record","recov","recover","recovery,","red","reduc","ref","refer","refer()","refer().","refer(class","refer(dubbo://provid","refer(registry://registri","reference,","reference.","referenceconfig","referenceconfig.get()","referenceconfig:","referenced.","reference:http://docs.jboss.org/cdi/tck/reference/1.0.1","referred(invok","refer:","regard","regist","register(dubbo://provid","register(url","registr","registri","registry,","registry.","registry:","registry://","registry://registri","registryfactori","registryfactory,","registryfactory.java:","registryprotocol","registryservic","registryservice.","registryservice.java:","registry:","regular","relat","relationship","releas","release.","reli","remain","remot","remoteaddress)","remoteexcept","remotingexcept","remotingexception;","remotingexception{","remov","replac","repositori","repres","repsonse,","request","request,","requir","required,","requirements:","rescan","research","resend","resourc","respond","respons","response,","rest","result","result.","result;","results)","retri","return","return.","reusabl","reuse.","reused,","revers","reverse.","review","rgba(158,188,226,0.12);","rgba(158,188,226,0.2);","right","risk.","risks.","rmi","rmi,","rmi.","rmi/dubbo/web","rmi:","rmiinvoker,","rmiprotocol","rout","router","router,","routerfactori","routers:","routing,","rpc","rpc,","rpc.","rpccontext.getcontext().setremoteaddress();","rpcexcept","rpcexception;","rubi","ruby,","rubyscriptengin","rule","rule:","run","run(url","running,","runtime,","runtime.","safe","safeti","same","satisfi","save","say:","sayhello(str","scan","scattered.","scenario","scenes,","schedul","scope","script","scriptengine,get","search","section.","select","select(list>","self","semant","send","sent","separ","seper","sequenc","serial","serialization,","serialize(paramet","seriou","serv","server","server,","server:","servi","servic","service'","service(e.g.","service,","service.","service:","serviceconfig","serviceconfig.export()","serviceconfig:","serviceproxi","services.","services,jvm","session","session=60000","set","set)","set,","set.","setdemoservice(demoservic","setter","setter.","settings\\.m2\\repositori","setup","setwheelmaker(wheelmak","share","sharing,","show","show;","side","side,","side.","side,provid","significantli","similar","simpl","simpledeploy","simpleschedul","simpli","simplicity.","simplifi","singl","singleton","situation.","skelet","skip","smell","snmp","socket","solid","sourc","source:jar","source:","space:","span","speaking,","special","specif","specifi","specifications:","specified.","speed","spi","spi'","spi(servic","spi,","spi.","spi.extensionload","spis,","spis。newli","spi。a","spi。get","spi,dubbo","spi:","split","spring","spring,","spring.","src","stabil","stability,","stabl","stable:","stage","stage.。when","standard","standlon","start","start()","startdard","starting,","state","static","staticmap,it","statist","statistics)","statu","status.","statuscheck","step,","sticki","still","stop()","store","strategi","strategy.","stream","string","string[]","strip","structure,","structure:","stub","student","style","style.","style:","styles,","sub","subclass","subpackag","subpackage,","subscrib","subscribe(dubbo://registri","subscribe(url","subscript","subscription,","subvers","such","suffix(file)).addparameter(\"rule\",","suggestion:","summari","summary=\"...\",","sunset","super(invoker);","super(type,","super(url,","super.unexport();","support","support.","suppos","sure","synchron","system","system.","t","tabl","tag","take","taken","task","tbodi","tck","tck.","tcp","td","td:nth","teardown","tell","telnet","telnet(channel","telnethandl","telnethandler,","test","testing,","testing.","testng","text","th","th,","theori","there'","third","this.demoservic","this.wheelmak","those","thread","threadpool","threadpool:","thrift","through","throughout","throw","throwabl","thrown","thrown,","thu","time","time,","time.","timecost","timeout","timeout=1000","timer","times,","to:","todo","togeth","together.","token","toler","tolerance,","tomcat/jboss","too,","tool","tool.","tools,","top,","topics:","topolog","tr:hover","tr:nth","track","transact","transfer","transform","transient","translat","transmision.","transmiss","transmission,","transmission.","transmit","transmition,","transpar","transparent,","transport","transporter,","travi","treat","tri","trial","triangl","tripartit","try...fin","turn","two","type","type,","type,extensionload","type.","type1","type2","type?)","types,","typic","uddi","udp","ugli","uncertain","unclaim","under","understand","unexport()","unexported(export","unifi","unit","unity.","unix","unrecover","unregist","unregister(url","unsubscrib","unsubscribe(url","unsubscription,","unsupportedoperationexception(\"i","until","up","upcom","upgrad","upper","uri","url","url)","url);","url,","url.","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.get(\"wheel.type\")","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","url.url","urls);","url,aft","url,but","url,default","url,dynam","us","usag","usage:","use:","used.","used。for","useless","user","user.","username:password","usual","util","valid","validate(invoc","validation.","valu","value)","value,","value,th","var","variabl","varieti","variou","veri","verifi","versa.","versio,","version","version,","versioning,","versions)","versions),","version,e.g.","version:high","version:low","via","view","view.","vise","void","wait","want","warn","wast","way","way,","webserviceinvok","weekly.","weight:","welcom","well:","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","whenextensionload","whether","which'","white","whole","width:","wildcard","window","word","work","work.","workspac","wrap","wrapper","wrapper.appendchild(el);","wrapper.classnam","write","xingzhi","xml","xmx1024m","xsocket","xx:maxpermsize=512m","xxx","xxx=com.alibaba.xxx.xxxprotocol","xxx=com.xxx.xxxcachefactori","xxx=com.xxx.xxxcachefactory)","xxx=com.xxx.xxxclust","xxx=com.xxx.xxxcluster)","xxx=com.xxx.xxxcompil","xxx=com.xxx.xxxcompiler)","xxx=com.xxx.xxxcontain","xxx=com.xxx.xxxcontainer)","xxx=com.xxx.xxxdispatch","xxx=com.xxx.xxxdispatcher)","xxx=com.xxx.xxxexchang","xxx=com.xxx.xxxexchanger)","xxx=com.xxx.xxxexporterlisten","xxx=com.xxx.xxxexporterlistener)","xxx=com.xxx.xxxextensionfactori","xxx=com.xxx.xxxextensionfactory)","xxx=com.xxx.xxxfilt","xxx=com.xxx.xxxfilter)","xxx=com.xxx.xxxinvokerlisten","xxx=com.xxx.xxxinvokerlistener)","xxx=com.xxx.xxxloadbal","xxx=com.xxx.xxxloadbalance)","xxx=com.xxx.xxxloggeradapt","xxx=com.xxx.xxxloggeradapter)","xxx=com.xxx.xxxmerg","xxx=com.xxx.xxxmerger)","xxx=com.xxx.xxxmonitorfactori","xxx=com.xxx.xxxmonitorfactory)","xxx=com.xxx.xxxnetwork","xxx=com.xxx.xxxnetworker)","xxx=com.xxx.xxxpagehandl","xxx=com.xxx.xxxpagehandler)","xxx=com.xxx.xxxprotocol","xxx=com.xxx.xxxprotocol)","xxx=com.xxx.xxxproxyfactori","xxx=com.xxx.xxxproxyfactory)","xxx=com.xxx.xxxregistryfactori","xxx=com.xxx.xxxregistryfactory)","xxx=com.xxx.xxxrouterfactori","xxx=com.xxx.xxxrouterfactory)","xxx=com.xxx.xxxseri","xxx=com.xxx.xxxserialization)","xxx=com.xxx.xxxstatuscheck","xxx=com.xxx.xxxstatuschecker)","xxx=com.xxx.xxxtelnethandl","xxx=com.xxx.xxxtelnethandler)","xxx=com.xxx.xxxthreadpool","xxx=com.xxx.xxxthreadpool)","xxx=com.xxx.xxxtransport","xxx=com.xxx.xxxtransporter)","xxx=com.xxx.xxxvalid","xxx=com.xxx.xxxvalidation)","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxcluster","xxxcluster.java","xxxcluster.java:","xxxcompil","xxxcompiler.java","xxxcompiler.java:","xxxcontain","xxxcontainer.java","xxxcontainer.java:","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","xxxfilter","xxxfilter.java","xxxfilter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","xxxmerger","xxxmerger.java","xxxmerger.java:","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","xxxprotocol","xxxprotocol(protocol","xxxprotocol.java","xxxprotocol.java:","xxxprotocolwrapp","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","xxxserial","xxxserialization.java","xxxserialization.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","xxxwrapper,bas","yyi","yyy,","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","{@link","|","}","})","};","↩","。if","。the","如:helloworldimpl),","朱启恒","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","没有配置cache属性时,使用此配置","用法","白文志","罗立树","订阅服务.","闾刚","),cach",",one",",setwheelmak",",string[]",",the",",to",",xxx,",":"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"dubbo-dev-book\nThis book dives into the design principles of dubbo, mainly covers the following topics: extension, coding styles, versio, build, etc.\n"},"build.html":{"url":"build.html","title":"1 How To Build","keywords":"","body":"Source Code Build\nCheckout\ncheckout the lastest project source code with commands blow:\ngit clone https://github.com/apache/incubator-dubbo.git dubbo\n\nBranches\nWe use master as the major branch for new feature development, and use other branches for maintenance. Tags for all versions can be checked via https://github.com/apache/incubator-dubbo/tags.\nBuilding\nDubbo relies on maven as the building tool.\nRequirements:\n\nJava above 1.5 version\nMaven version 2.2.1 or above    \n\nThe following MAVEN_OPTSshould be configured before building:\nexport MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=512m\n\nbuild with below command:\nmvn clean install\n\nskip testing using below building command:\nmvn install -Dmaven.test.skip\n\nBuilding jar package of source code\nbuild Dubbo source code jar package with below command, which can debug Dubbo source code. \nmvn clean source:jar install -Dmaven.test.skip\n\nIDE support\nuse below command to generate IDE.\nIntellij Idea\nmvn idea:idea\n\nEclipse\nmvn eclipse:eclipse\n\nImporting into eclipse\nFirstly, a maven repository needs to be configured in eclipse. Define M2_REPO and point it to the local maven repository by clicking Preferences -> Java -> Build Path -> Classpath.\nUse the following maven command as well: \nmvn eclipse:configure-workspace -Declipse.workspace=/path/to/the/workspace/\n\n1: view the source code through https://github.com/apache/incubator-dubbo \n2: path under UNIX is ${HOME}/.m2/repository, path under Windows is C:\\Documents and Settings\\.m2\\repository\n"},"design.html":{"url":"design.html","title":"2 Architecture","keywords":"","body":"Framework Design\nOverall design\n\nImage description:\n\nLeft area with light blue background shows service consumer interfaces, Right area with light green background shows service provider interfaces, center area shows both side interfaces.\nThe image is divided into 10 layers from the bottom to the top, and the layers are one-way dependence. The black arrow on the right represents the dependency between layers, and each layer can be stripped from the upper layer to be reused, the Service and Config layers are API, and the other layers are SPI.\nGreen boxes are extension interfaces, blue boxes are implementation classes, image only shows implementation class of associated layers.\nThe blue dashed line is the initialization process, which is assembly chain when starting, red line for the method call process, which is calling chain when running, purple triangle arrow is inherited, can treat subclass as the same node of parent class, text of lines are the method invocation.\n\nLayer description\n\nconfig layer: external config interface, ServiceConfig and ReferenceConfig is the center of the layer, you can directly initialize config class, also can generate config class by spring.\nproxy layer: transparent proxy of service interface, generate client Stub of service and server Skeletion of service, ServiceProxy is the center, extension interface is ProxyFactory.\nregistry layer: encapsulation of service registry and discovery, service URL is the center, extension interfaces are RegistryFactory, Registry and RegistryService.\ncluster layer: encapsulation of cluster of muliple providers and load balance, and bridging registration center, Invoker is the center, extension interfaces are Cluster, Directory, Router, LoadBalance.\nmonitor layer: monitor of RPC call times and call execute time, Statistics is the center, extension interface are MonitorFactory, Monitor, MonitorService\nprotocol layer: encapsulation of RPC, Invocation and Result are the center, extension interfaces are Protocol, Invoker, Exporter\nexchange layer: encapsulation of request and response, synchronous transfer asynchronous, Request and Response are the center, extension interfaces are Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer\ntransport layer: abstraction of mina and netty, Message is the center, extension interfaces are Channel, Transporter, Client, Server, Codec\nserialize layer: reusable tools, extension interfaces are Serialization, ObjectInput, ObjectOutput, ThreadPool\n\nRelationship description\n\nIn RPC, Protocol is the core layer, it means that you can complete RPC calling by Protocol + Invoker + Exporter, then filter at the main process of Invoker.\nConsumer and Provider are abstraction concepts, just want you have a more intuitive understanding of which classes belong to the client and server side, the reason not use Client and Server is that Dubbo uses Provider, Consumer, Registry, Monitor divide logical topology node in many scenes, keep the concept of unity.\nCluster is external concept, the purpose of Cluster is that make various Invoker disguise to one Invoker, so that we just pay attention to the Invoker in Protocol layer, adding Cluster or removing Cluster will not affect other layers, because we don't need Cluster when only have one provider.\nThe Proxy layer encapsulates the transparent proxy for all interfaces, and in other layers with Invoker as the center, turn Invoker into interface, or turn interface implementation into Invoker by Proxy only when exposuring to user. RPC still work even removing Proxy layer, but not so transparent, making remote service calling don't look like local service calling.\nRemoting is the implemetation of Dubbo protocols, you can remove Remoting if choosing RMI. The Remoting is divided into Transport layer and Exchange layer, Transport layer is responsible for one-way message transmission, it's abstraction of Mina, Netty, Grizzly, it also can extend UDP transmission. The Exchange layer encapsulates the Request-Response semantics over the transport layer.\nActually Registry and Monitor are not at the same layer, they are independent nodes, draw them together by layer just for global view.\n\nModules packaging\n\nModules description:\n\ndubbo-common module: includes Util classes and common modules.\ndubbo-remoting module: is Dubbo protocol implementation, no need to use this module if using RMI for RPC.\ndubbo-rpc module: abstraction of various protocols, and dynamic proxy, only one to one call, not concerned with the management of cluster.\ndubbo-cluster module: disguise many service providers as one provider, including load balancing, fault tolerance, routing, etc. the address list of clusters can be either static or send by registry.\ndubbo-registry module: Based on the cluster of registry send address and the abstraction of various registry centers.\ndubbo-monitor module: statistics of service call times, call time, call chain tracked services.\ndubbo-config module: is Dubbo external API, users use Dubbo by Config, hide Dubbo details.\ndubbo-container module: is a Standlone container, just use Main method to load Spring, because usually service no need Tomcat/JBoss features.\n\nPackage dividing according to the layer structure, and the difference with layer dividing:\n\ncontainer is service container, for service running deployment, not showed in the image.\nprotocol layer and proxy layer are placed in RPC module, they are the core of RPC module, you can use these 2 layers complete RPC call when only have 1 provider.\ntransport layer and exchange layer are placed in remoting module, for RPC call base comminucation.\nserialize layer is placed in common module, for reuse.\n\nDependence relationship\n\nImage description:\n\nThe boxes in image, Protocol, Cluster, Proxy, Service, Container, Registry, Monitor represent layer or module, the blues mean interactive with business, the greens mean only internal interactive with Dubbo.\nThe backgroud boxes in image, Consumer, Provider, Registry, Monitor represent deployment logical topology node.\nThe blue dashed line in the image is called for initialization, the red dashed line is called asynchronously for runtime, and the red line is called synchronously for runtime.\nThe image only includes RPC layer, don't includes Remoting layer, the whole Remoting hides in Protocol layer.\n\nCall chain\nExpand the red call chain of the overall design map:\n\nExpose service sequence\nExpand the initialization chain of service provider exposes service which at the left of the overall design map, the sequence diagram shows below:\n\nReference service sequence\nExpand the initialization chain of service consumer references service which at the right of the overall design map, the sequence diagram shows below:\n\nDomain model\nThe core domain models of Dubbo:\n\nProtocol is service domain, it is the main function entrance of Invoker exposure and reference, it is responsible for the life cycle management of Invoker.\nInvoker is entity domain, it is the core model of Dubbo, all the other models are disturbed, or converted to it, it represents an executable, you can call it by calling invoke, it can be a local implementation, a remote implementation, or a cluster implementation.\nInvocation is session domain, it holds variables in the calling process, such as the method name, the parameters, and so on.\n\nBase design principle\n\nUse Microkernel + Plugin design pattern,Microkernel only responsible for assembly Plugin, the functions of Dubbo are implemented by extension points, it means that all functions of Dubbo can be replaced by self defined extension by user.\nUse URL to be the startdard format of config information, all extension points transfer config information by URL.\n\nMore design principles refer to: Framework design principle\n"},"SPI.html":{"url":"SPI.html","title":"3 How SPI Works","keywords":"","body":"SPI Loading\nSPI Config\nSource:\nDubbo SPI is inherited from standard JDK SPI(Service Provider Interface) and makes it more powerful.\nDubbo fixed below issues of the standard JDK SPI:\n\nthe standard JDK  SPI will load  and instantize all implementation at once. It will be a waste of resources if the implementation is timecosted ,but never be used.\nWe cann't accquire the SPI name,if loading the SPI implementation is failed.For example:standard JDK  ScriptEngine,get script type by invoking method getName(). RubyScriptEngine class will load failed if the depenency jar jruby.jar is missing,and the real error info will be lost. When user executes ruby scripts , program throws exception , telling not support ruby, but it is not the real cause.\nEnhance the SPI functionality by supporting  IoC and AOP ,one SPI can be easily injected by another SPI simply using  setter.\n\nAppointment:\nIn the jar file containing extension class 1,places a config file  META-INF/dubbo/full interface name,file content pattern:SPI name=the fully qualified name for the extension class,use new line seperator for multiple implementation.\nExample:\nTo extend  Dubbo Protocol,placee a text file in the extension jar file:META-INF/dubbo/com.alibaba.dubbo.rpc.Protocol,content:\nxxx=com.alibaba.xxx.XxxProtocol\n\ncontent of the implementation 2:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implemenets Protocol { \n    // ...\n}\n\nConfiguration in config module\nIn Dubbo config module,all SPI points have related attributes or labels,we can choose the specific SPI implementation by using its name. Like:\n\n\nSPI Features\nSPI Auto Wrap\nAuto wrap the SPI's Wrapper class。ExtensionLoader  loads the SPI implementation,if the SPI has a copy instructor ,it will be regarded as the SPI's Wrapper class。\nWrapper class content:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocolWrapper implemenets Protocol {\n    Protocol impl;\n\n    public XxxProtocol(Protocol protocol) { impl = protocol; }\n\n    //after interface method is executed,the method in extension will be executed\n    public void refer() {\n        //... some operation\n        impl.refer();\n        // ... some operation\n    }\n\n    // ...\n}\n\nWrapper class also implements the same SPI interface,but Wrapper is not the real implementation。It is used for wrap the real  implementation  returned from the ExtensionLoader 。The real returned instance by   ExtensionLoader  is the Wrapper class instance,Wrapper holder the real SPI implementation class。\nThere can be many Wrapper for one spi, simply add one if you need。\nBy Wrapper class,you will be able move same logics into Wrapper for all SPIs。Newly added Wrapper class add external logics for all spis, looks like  AOP, Wrapper acts as a proxy for SPI.\nSPI Auto Load\nwhen loading the SPI,Dubbo will auto load the depency SPI. When one SPI implementation contains attribute which is also an SPI of another type,ExtensionLoader will automatically load the depency SPI.ExtensionLoader knows all the members of the specific SPI by scanning the setter method of all implementation class.\nDemo:two SPI  CarMaker(car maker)、WheelMaker (wheel maker)\nIntefaces look like:\npublic interface CarMaker {\n    Car makeCar();\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel();\n}\n\nCarMaker  implementation:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar() {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel();\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\nwhenExtensionLoader loading CarMaker  implementation RaceCar ,setWheelMaker  needs paramType WheelMaker  which is also an SPI, It will be automatically loaded .\nThis brings a new question:How ExtensionLoader determines which implementation to use when load the injected SPI。As for this demo, when existing multi WheelMaker  implementation, which one should the ExtensionLoader  chooses.\nGood question ,we will explain it in the following chapter: SPI Auto Adaptive.\nSPI Auto Adaptive\nThe depency SPI that ExtensionLoader  injects is an instance of Adaptive,the real spi implementation is known until the adaptive instance is be executed.\nDubbo  use URL (containing Key-Value) to pass the configuration.\nThe SPI method invocation has the URL parameter(Or Entity that has URL attribute)\nIn this way depended SPI can get configuration from URL,after config all SPI  key needed, configuration information will be passed from outer by URL.URL act as a bus when pass the config information.\nDemo:two SPI  CarMaker、WheelMaker\ninterface looks like:\npublic interface CarMaker {\n    Car makeCar(URL url);\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel(URL url);\n}\n\nCarMaker  implementation:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar(URL url) {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel(url);\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\nwhen execute the code above\n// ...\nWheel wheel = wheelMaker.makeWheel(url);\n// ...\n\n,the injected Adaptive  object determine which  WheelMaker 's  makeWheel  method will be executed by predefined Key.。Such  as wheel.type, key  url.get(\"wheel.type\")  will determine WheelMake  implementation。The logic ofAdaptive instance of fixed,getting the predefined Key of the URL,dynamically creating the real implementation and execute it.\nFor Dubbo , the SPI  Adaptive  implementation in  ExtensionLoader  is dynamically created when dubbo is loading the SPI。Get the Key from URL, the Key will be provided through @Adaptive annotation for the interface method definition.\nBelow is Dubbo  Transporter SPI codes:\npublic interface Transporter {\n    @Adaptive({\"server\", \"transport\"})\n    Server bind(URL url, ChannelHandler handler) throws RemotingException;\n\n    @Adaptive({\"client\", \"transport\"})\n    Client connect(URL url, ChannelHandler handler) throws RemotingException;\n}\n\nfor the method bind(),Adaptive will firstly search server key,if no Key  were founded then will search transport key ,to determine the implementation that the proxy represent for.\nSPI Auto Activation\nAs for Collections SPI, such as:Filter, InvokerListener, ExportListener, TelnetHandler, StatusChecker  etc,multi implementations can be loaded at one time. User can simplify configuration by using auto activation,Like:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate // Active for any condition\npublic class XxxFilter implements Filter {\n    // ...\n}\n\nOr:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(\"xxx\") // when configed xxx parameter and the parameter has a valid value,the SPI is activated,for example configed cache=\"lru\",auto acitivate CacheFilter。\npublic class XxxFilter implements Filter {\n    // ...\n}\n\nOr:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(group = \"provider\", value = \"xxx\") // only activate for provider,group can be \"provider\" or \"consumer\"\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n\n1. Note:The config file here is in you own jar file,not in dubbo release jar file,Dubbo  will scan all jar files for the same filename in  ClassPath and merge together then ↩\n\n\n2. Note:SPI will be loaded in singleton pattern(Please ensure thread safety ),cached in  ExtensionLoader  ↩\n\n"},"implementation.html":{"url":"implementation.html","title":"4 Init, Process, Protocols","keywords":"","body":"Implementation details\nInitialization details\nService parsing\nBased on META-INF/spring.handlers config in dubbo.jar, Spring calls DubboNamespaceHandler when meeting dubbo namespace.\nAll Dubbo tags are parsed by DubboBeanDefinitionParser, based on one to one attribute mapping, the XML label is parsed as a Bean object.\nTransfer Bean object to URL, and transfer all attributes of Bean to URL parameters when ServiceConfig.export() or ReferenceConfig.get() initialization.\nThen pase URL to Protocol extension point, based on Extension point adaptive mechanism of extension point, processing service exposure or reference for different protocols according to URL protocol header.\nService Exposure\n1. Only expose service port:\nDirect exposing to provider when have not Registry, 1, the URL format which parsing by ServiceConfig:\ndubbo://service-host/com.foo.FooService?version=1.0.0.\nBased on extension point adaptive mechanism, call export() method of DubboProtocol and open server port by identifying dubbo:// protocol header of URL.\n2. Expose to Registry:\nExpose provider address to Registry 2, the URL format which parsing by ServiceConfig: registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(\"dubbo://service-host/com.foo.FooService?version=1.0.0\"),\nBased on extension point adaptive mechanism, call export() method of RegistryProtocol by identifying  registry:// protocol header, register the provider URL parameter of export to Registry.\nResend to Protocol extension point to do exposure: dubbo://service-host/com.foo.FooService?version=1.0.0, then based on extension point adaptive mechanism, call export() method of DubboProtocol and open server port by identifying dubbo:// protocol header of provider URL.\nService Reference\n1. Direct connect service\nDirect connect provider when have not Registry 3, the URL format which parsing by ReferenceConfig: dubbo://service-host/com.foo.FooService?version=1.0.0.\nBased on extension point adaptive mechanism, call refer() method of DubboProtocol by identifying dubbo:// protocol header of URL, and return provider reference.\n2. Service Registry discovery\nDiscover provider address by Registry 4, the URL format which parsing by ReferenceConfig:\nregistry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode(\"consumer://consumer-host/com.foo.FooService?version=1.0.0\").\nBased on extension point adaptive mechanism, call refer() method of RegistryProtocol by identifying registry:// protocol header of URL, then based on the condition of parameter of refer to search provider URL, for example: dubbo://service-host/com.foo.FooService?version=1.0.0.\nThen based on extension point adaptive mechanism, call refer() method of DubboProtocol to get provider reference by identifying dubbo:// protocol header of provider URL.\nThen RegistryProtocol disguise various provider references to single provider by Cluster extension point and return.\nService Filter\nBased on extension point adaptive mechanism, all Protocol extension points are auto wrapped Wrapper class.\nBased on ProtocolFilterWrapper class, make all Filter as chain, call the real reference at the end of the chain.\nBased on ProtocolListenerWrapper class, make all InvokerListener and ExporterListener as list, perform call back before and after exposure and reference.\nAll additional functions would be implementated by Filter, including Monitor.\nRPC details\nThe detail process of exposing service by service provider\n\nThe above image shows the main process of exposing service by service provider:\nFirst ServiceConfig class get the actual class ref that provides service(e.g. 如:HelloWorldImpl), then generating a AbstractProxyInvoker instance by the getInvoker method of ProxyFactory class, to this step, complete the transformation of specific service to Invoker, next is the process of converting Invoker to Exporter.\nThe key of Dubbo processing service exposure is the process of converting Invoker to Exporter, the red part in the above image. Here we introduce the implementation of the two typical protocols, Dubbo and RMI:\nDubbo implementation\nThe transformation from Invoker of Dubbo protocol to Exporter takes place in the export method of DubboProtocol class, it mainly opens the socket to listen service and receive all kinds of requests sent by the client, and the communication details are implementated by Dubbo itself.\nRMI implementation\nThe transformation from Invoker of RMI protocol to Exporter takes place in the export method of RmiProtocol class, the RMI service is implementated by Spring, Dubbo or JDK, and the communication details are implementated by JDK, which saves a lot of work.\nThe detail process of serving service for service consumer\n\nThe above image is the main process of service consumption:\nFirst, the init method of ReferenceConfig class calls the refer method of Protocol to generate Invoker instance(such as the red part in the above image), which is the key of service consumption. Then the Invoker is converted to the interface required by the client (such as: HelloWorld).\nFor each protocol such as RMI/Dubbo/Web service, the details they call refer method generate Invoker instance are similar to the previous section.\nInvoker everywhere\nBecause of Invoker is a very important concept in the Dubbo domain model, many of the design ideas are close to it. This makes Invoker permeate the entire implementation code, and it's really easy to mix up for people who have just started Dubbo.\nLet's use a simple image below to describe the 2 important Invoker: service provider Invoker and service consumer Invoker:\n\nTo better explain the above image, we provide the below code examples of service consumption and providers:\nService consumer code:\npublic class DemoClientAction {\n\n    private DemoService demoService;\n\n    public void setDemoService(DemoService demoService) {\n        this.demoService = demoService;\n    }\n\n    public void start() {\n        String hello = demoService.sayHello(\"world\" + i);\n    }\n}\n\nThe DemoService in above code is the proxy of service consumer in above image, user can call Invoker 5 which implementate the real RPC by the proxy.\nService provider code:\npublic class DemoServiceImpl implements DemoService {\n\n    public String sayHello(String name) throws RemoteException {\n        return \"Hello \" + name;\n    }\n}\n\nThe above class would be encapsulated to be a AbstractProxyInvoker instance, and create a new Exporter instance, then find corresponding Exporter instance and call its corresponding AbstractProxyInvoker instance when network communication layer recieve request, so that real call service provider code. There are some other Invoker classes, but the above 2 are the most important.\nRemote communication details\nProtocol header agreement\n\nThread dispatch model\n\n\nDispather: all, direct, message, execution, connection\nThreadPool: fixed, cached\n\n\n1. is  or  ↩\n\n\n2. is  ↩\n\n\n3. is  ↩\n\n\n4. is  ↩\n\n\n5. is one of DubboInvoker, HessianRpcInvoker, InjvmInvoker, RmiInvoker, WebServiceInvoker ↩\n\n"},"impls/introduction.html":{"url":"impls/introduction.html","title":"5 SPI Extensions","keywords":"","body":"SPI Extension Implementations\nSPI extension interface is used for system integration, it's also useful for dubbo contributor to extend dubbo functionality.\n"},"impls/protocol.html":{"url":"impls/protocol.html","title":"5.1 Protocol","keywords":"","body":"Protocol Extension\nSummary\nExtension to RPC protocol, hide details of remote call.\nContract:\n\nWhen user calls invoke() method of Invoker object which's returned from refer() call, the protocol needs to correspondingly execute invoke() method of Invoker object passed from remote export() method associated with the same URL.\nMoreover, it's protocol's responsibility to implement Invoker which's returned from refer(). Generally speaking, protocol sends remote request in the Invoker implementation, but needs not to care about the Invoker passed into export() since the framework will implement the logic and pass in the instance.\n\nNotes:\n\nProtocol does not need to care about the proxy of the business interface. The upper layer of the framework will convert Invoker into business interface.\nIt is not a requirement that the protocol must use TCP for network communication. It could be file-sharing, IPC, or others.\n\nExtension Interface\n\ncom.alibaba.dubbo.rpc.Protocol\ncom.alibaba.dubbo.rpc.Exporter\ncom.alibaba.dubbo.rpc.Invoker\n\npublic interface Protocol {\n    /**\n     * Export remote service: \n     * 1. Should save address info for the request when the protocol receives it: RpcContext.getContext().setRemoteAddress();\n     * 2. export() must be implemented as idempotent, that is, it should not introduce side effect when the implementation gets called with the same Invoker for more than once.\n     * 3. Invoker is passed by the framework, and the protocol should not care about it. \n     * \n     * @param  Service type\n     * @param invoker Service invoker\n     * @return exporter The reference of service exporter, used for cancelling service export.\n     * @throws RpcException throw when there's any error during service export, e.g. the port is occupied\n     */\n     Exporter export(Invoker invoker) throws RpcException;\n\n    /**\n     * Reference remote service: \n     * 1. When user calls `invoke()` method of `Invoker` object which's returned from `refer()` call, the protocol needs to correspondingly execute `invoke()` method of `Invoker` object passed from remote `export()` method associated with the same URL. \n     * 2. It's protocol's responsibility to implement `Invoker` which's returned from `refer()`. Generally speaking, protocol sends remote request in the `Invoker` implementation. \n     * 3. When there's check=false set in URL, the implementation must not throw exception but try to recover when connection fails.\n     * \n     * @param  Service type\n     * @param type Service type\n     * @param url URL address for the remote service\n     * @return invoker service's local proxy\n     * @throws RpcException throw when there's any error while connecting to the service provider\n     */\n     Invoker refer(Class type, URL url) throws RpcException;\n\n}\n\nExtension Configuration\n\n\n\n\n --> \n\n\nExisting Protocol\n\ncom.alibaba.dubbo.rpc.injvm.InjvmProtocol\ncom.alibaba.dubbo.rpc.dubbo.DubboProtocol\ncom.alibaba.dubbo.rpc.rmi.RmiProtocol\ncom.alibaba.dubbo.rpc.http.HttpProtocol\ncom.alibaba.dubbo.rpc.http.hessian.HessianProtocol\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProtocol.java (Protocol implementation)\n                |-XxxExporter.java (Exporter implementation)\n                |-XxxInvoker.java (Invoker implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Protocol (plain text file with the content: xxx=com.xxx.XxxProtocol)\nXxxProtocol.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implements Protocol {\n    public  Exporter export(Invoker invoker) throws RpcException {\n        return new XxxExporter(invoker);\n    }\n    public  Invoker refer(Class type, URL url) throws RpcException {\n        return new XxxInvoker(type, url);\n    }\n}\n\nXxxExporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractExporter;\n\npublic class XxxExporter extends AbstractExporter {\n    public XxxExporter(Invoker invoker) throws RemotingException{\n        super(invoker);\n        // ...\n    }\n    public void unexport() {\n        super.unexport();\n        // ...\n    }\n}\n\nXxxInvoker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractInvoker;\n\npublic class XxxInvoker extends AbstractInvoker {\n    public XxxInvoker(Class type, URL url) throws RemotingException{\n        super(type, url);\n    }\n    protected abstract Object doInvoke(Invocation invocation) throws Throwable {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Protocol:\nxxx=com.xxx.XxxProtocol\n\n"},"impls/filter.html":{"url":"impls/filter.html","title":"5.2 Filter","keywords":"","body":"Filter Extension\nSummary\nExtension for intercepting the invocation for both service provider and consumer, furthermore, most of functions in dubbo are implemented base on the same mechanism. Since every time when remote method is invoked, the filter extensions will be executed too, the corresponding penalty should be considered before more filters are added.\nContract:\n\nUser defined filters are executed after built-in filters by default.\nSpecial value default is introduced to represent the default extension location. For example: for filter=\"xxx,default,yyy\", xxx is before default filter, and yyy is after the default filter.\nSpecial value - means delete. For example: filter=\"-foo1\" excludes foo1 extension. For example, filter=\"-default\" exclues all default filters.\nWhen provider and service have filter configured at the same moment, all filters are accumulated together instead of override, for example: for  and ,xxx, yyy, aaa, bbb are all count as filters. In order to change to override, use:  \n\nExtension Interface\ncom.alibaba.dubbo.rpc.Filter\nExtension Configuration\n\n\n\n\n\n\n\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.filter.EchoFilter\ncom.alibaba.dubbo.rpc.filter.GenericFilter\ncom.alibaba.dubbo.rpc.filter.GenericImplFilter\ncom.alibaba.dubbo.rpc.filter.TokenFilter\ncom.alibaba.dubbo.rpc.filter.AccessLogFilter\ncom.alibaba.dubbo.rpc.filter.CountFilter\ncom.alibaba.dubbo.rpc.filter.ActiveLimitFilter\ncom.alibaba.dubbo.rpc.filter.ClassLoaderFilter\ncom.alibaba.dubbo.rpc.filter.ContextFilter\ncom.alibaba.dubbo.rpc.filter.ConsumerContextFilter\ncom.alibaba.dubbo.rpc.filter.ExceptionFilter\ncom.alibaba.dubbo.rpc.filter.ExecuteLimitFilter\ncom.alibaba.dubbo.rpc.filter.DeprecatedFilter\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxFilter.java (Filter implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Filter (plain text file with the content: xxx=com.xxx.XxxFilter)\nXxxFilter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Filter;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxFilter implements Filter {\n    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {\n        // before filter ...\n        Result result = invoker.invoke(invocation);\n        // after filter ...\n        return result;\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Filter:\nxxx=com.xxx.XxxFilter\n\n"},"impls/invoker-listener.html":{"url":"impls/invoker-listener.html","title":"5.3 InvokerListener","keywords":"","body":"InvokerListener Extension\nSummary\nFire event when there's any service referenced.\nExtension Interface\ncom.alibaba.dubbo.rpc.InvokerListener\nExtension Configuration\n\n\n \n\n\n\nExisting Extension\ncom.alibaba.dubbo.rpc.listener.DeprecatedInvokerListener\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxInvokerListener.java (InvokerListener implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.InvokerListener (plain text file with the content: xxx=com.xxx.XxxInvokerListener)\nXxxInvokerListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.InvokerListener;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxInvokerListener implements InvokerListener {\n    public void referred(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public void destroyed(Invoker invoker) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.InvokerListener:\nxxx=com.xxx.XxxInvokerListener\n\n"},"impls/exporter-listener.html":{"url":"impls/exporter-listener.html","title":"5.4 ExporterListener","keywords":"","body":"ExporterListener Extension\nSummary\nFire events when there's any service exported. \nExtension Interface\ncom.alibaba.dubbo.rpc.ExporterListener\nExtension Configuration\n\n\n\n\n\nExisting Extension\ncom.alibaba.dubbo.registry.directory.RegistryExporterListener\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExporterListener.java (ExporterListener implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ExporterListener (plain text file with the content: xxx=com.xxx.XxxExporterListener)\nXxxExporterListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ExporterListener;\nimport com.alibaba.dubbo.rpc.Exporter;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxExporterListener implements ExporterListener {\n    public void exported(Exporter exporter) throws RpcException {\n        // ...\n    }\n    public void unexported(Exporter exporter) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ExporterListener:\nxxx=com.xxx.XxxExporterListener\n\n"},"impls/cluster.html":{"url":"impls/cluster.html","title":"5.5 Cluster","keywords":"","body":"Cluster Extension\nSummary\nGroup service providers in a cluster, and treat them as one single provider.\nExtension Interface\ncom.alibaba.dubbo.rpc.cluster.Cluster\nExtension Configuration\n\n  -->\n\n\nExisting Extensions\n\ncom.alibaba.dubbo.rpc.cluster.support.FailoverCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailfastCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailsafeCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailbackCluster\ncom.alibaba.dubbo.rpc.cluster.support.ForkingCluster\ncom.alibaba.dubbo.rpc.cluster.support.AvailableCluster\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCluster.java (Cluster implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Cluster (plain text file with the content: xxx=com.xxx.XxxCluster)\nXxxCluster.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Cluster;\nimport com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker;\nimport com.alibaba.dubbo.rpc.cluster.Directory;\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxCluster implements Cluster {\n    public  Invoker merge(Directory directory) throws RpcException {\n        return new AbstractClusterInvoker(directory) {\n            public Result doInvoke(Invocation invocation, List> invokers, LoadBalance loadbalance) throws RpcException {\n                // ...\n            }\n        };\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Cluster:\nxxx=com.xxx.XxxCluster\n\n"},"impls/router.html":{"url":"impls/router.html","title":"5.6 Router","keywords":"","body":"Router Extension\nSummary\nPick one from service providers and fire the invocation.\nExtension Interface\n\ncom.alibaba.dubbo.rpc.cluster.RouterFactory\ncom.alibaba.dubbo.rpc.cluster.Router\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.cluster.router.ScriptRouterFactory\ncom.alibaba.dubbo.rpc.cluster.router.FileRouterFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRouterFactory.java (LoadBalance implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.RouterFactory (plain text file with the content: xxx=com.xxx.XxxRouterFactory)\nXxxRouterFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.RouterFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxRouterFactory implements RouterFactory {\n    public  List> select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.RouterFactory:\nxxx=com.xxx.XxxRouterFactory\n\n"},"impls/load-balance.html":{"url":"impls/load-balance.html","title":"5.7 LoadBalance","keywords":"","body":"LoadBalance Extension\nSummary\nPick one from service providers and fire the invocation.\nExtension Interface\ncom.alibaba.dubbo.rpc.cluster.LoadBalance\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoadBalance.java (LoadBalance implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.LoadBalance (plain text file with the content: xxx=com.xxx.XxxLoadBalance)\nXxxLoadBalance.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException; \n\npublic class XxxLoadBalance implements LoadBalance {\n    public  Invoker select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance:\nxxx=com.xxx.XxxLoadBalance\n\n"},"impls/merger.html":{"url":"impls/merger.html","title":"5.8 Merger","keywords":"","body":"Merger Extension\nSummary\nMerge strategy for return result aggregation in group.\nExtension Interface\ncom.alibaba.dubbo.rpc.cluster.Merger\nExtension Configuration\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.cluster.merger.ArrayMerger\ncom.alibaba.dubbo.rpc.cluster.merger.ListMerger\ncom.alibaba.dubbo.rpc.cluster.merger.SetMerger\ncom.alibaba.dubbo.rpc.cluster.merger.MapMerger\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMerger.java (Merger implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Merger (plain text file with the content: xxx=com.xxx.XxxMerger)\nXxxMerger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Merger;\n\npublic class XxxMerger implements Merger {\n    public T merge(T... results) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Merger:\nxxx=com.xxx.XxxMerger\n\n"},"impls/registry.html":{"url":"impls/registry.html","title":"5.9 Registry","keywords":"","body":"Registry Extension\nSummary\nRegistry extension is used for service registration and discovery.\nExtension Interface\n\ncom.alibaba.dubbo.registry.RegistryFactory\ncom.alibaba.dubbo.registry.Registry\n\nExtension Configuration\n\n\n\n\n -->\n\n\nExtension Contract\nRegistryFactory.java:\npublic interface RegistryFactory {\n    /**\n     * Connect to registry server\n     * \n     * The contract for connecting to registry server: \n     * 1. Will not check connection when check=false is set, otherwise exception will be thrown if connection fails. \n     * 2. Support authorizing against username:password in the URL \n     * 3. Support registry server backup with backup=10.20.153.10 \n     * 4. Support cache on local disk with file=registry.cache \n     * 5. Support timeout setup with timeout=1000 \n     * 6. Support session expiration setup with session=60000 \n     * \n     * @param url registry server address, null is not allowed\n     * @return reference to registry server, never return null\n     */\n    Registry getRegistry(URL url); \n}\n\nRegistryService.java:\npublic interface RegistryService { // Registry extends RegistryService \n    /**\n     * Register service.\n     * \n     * Contract for registering service: \n     * 1. Registration failure will be ignored and kept retrying if check=false is set in URL, otherwise exception will be thrown \n     * 2. Persistence is required if dynamic=false is set in URL, otherwise, the registration info will be removed automatically when register quits accidentally \n     * 3. Persistent by category if category=overrides is set in URL, default category is providers. It is possible to notify by category. \n     * 4. Data lost is not tolerant when registry server reboots or network jitter happens.  \n     * 5. It is not allowed to override each other when URLs have same URI part but different parameters \n     * \n     * @param url registration info,null is not allowed, e.g.: dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void register(URL url);\n\n    /**\n     * Unregister service.\n     * \n     * Contract for unregistering service: \n     * 1. IllegalStateException should be thrown when registration info which's supposed to be persistent (with dynamic=false set) cannot be found, otherwise it should be ignored. \n     * 2. To cancel one service, extract match on its URL will be honored \n     * \n     * @param url registration info,null is not allowed, e.g.: dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void unregister(URL url);\n\n    /**\n     * 订阅服务.\n     * Subscribe service.\n     * \n     * Contract for subscribing service: \n     * 1. Subscription failure will be ignored and kept retrying if check=false is set in URL \n     * 2. Only the specified category will be notified if category=overrides is set in URL. Categories are seperated with comma, and all categorized data will be subscribed when wildcard \"*\" is specified. \n     * 3. Allow to query by interface, group, version, classifier, e.g.: interface=com.alibaba.foo.BarService&version=1.0.0\n     * 4. Allow to query with wildcard \"*\" to subscribe all versions under all categories for all interfaces, e.g.: interface=*&group=*&version=*&classifier=*\n     * 5. Subscription will be automatically recoverred when registry server reboots or network jitter happens. \n     * 6. It is not allowed to override each other when URLs have same URI part but different parameters \n     * 7. Subscription procedure will not return until the first notification happens. \n     * \n     * @param url URL for subscription, null isn't allowed, e.g.: consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener notification listener, null is not allowed\n     */\n    void subscribe(URL url, NotifyListener listener);\n\n    /**\n     * Unsubscribe service.\n     * \n     * Contract for unsubscribing service: \n     * 1. Simply ignore if not subscribe \n     * 2. Unsubscribe with URL exact match \n     * \n     * @param url URL for unsubscription, null is not allowed, e.g.: consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener notification listener, null is not allowed\n     */\n    void unsubscribe(URL url, NotifyListener listener);\n\n    /**\n     * 查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。\n     * Lookup subscription list. Compared to push mode for subscription, this is pull mode and returns result only once.\n     * \n     * @see com.alibaba.dubbo.registry.NotifyListener#notify(List)\n     * @param url URL for  query, null is not allowed, e.g.: consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @return subscription list, could be null, has the same meaning as the parameters in {@link com.alibaba.dubbo.registry.NotifyListener#notify(List)}.\n     */\n    List lookup(URL url);\n\n}\n\nNotifyListener.java:\npublic interface NotifyListener { \n    /**\n     * Fire event when receive service change notification.\n     * \n     * Contract for notify: \n     * 1. Always notify with the whole data instead of partial data from the perspective of service interface and data type. In this way, user needs not compare with the previous result. \n     * 2. First notification for subscription must contain the full set of data for one particular service \n     * 3. It is allowed to separate the different type of data in the upcoming notifications, e.g.: it is legal to only notify one of types among providers, consumers, routes or overrides each time, but pls. note for this particular type, the data must be a full set. \n     * 4. If the data for one particular type is empty, need to notify with a special URL which has empty as its protocol and has category parameter for this particluar type.\n     * 5. Notifier (usually it is monitor center) needs to guarantee the notification sequence by, for say: single thread push, queuing in order,  versioning, etc. \n     * \n     * @param urls subscription list, always not empty, equivalent to the return result of {@link com.alibaba.dubbo.registry.RegistryService#lookup(URL)}.\n     */\n    void notify(List urls);\n\n}\n\nExisting Extension\ncom.alibaba.dubbo.registry.support.dubbo.DubboRegistryFactory\nExtension Guide\nDirectory structure:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRegistryFactoryjava (RegistryFactory implementation)\n                |-XxxRegistry.java (Registry implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.registry.RegistryFactory (plain text file with the content: xxx=com.xxx.XxxRegistryFactory)\nXxxRegistryFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.RegistryFactory;\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistryFactory implements RegistryFactory {\n    public Registry getRegistry(URL url) {\n        return new XxxRegistry(url);\n    }\n}\n\nXxxRegistry.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.registry.NotifyListener;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistry implements Registry {\n    public void register(URL url) {\n        // ...\n    }\n    public void unregister(URL url) {\n        // ...\n    }\n    public void subscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n    public void unsubscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory:\nxxx=com.xxx.XxxRegistryFactory\n\n"},"impls/monitor.html":{"url":"impls/monitor.html","title":"5.10 Monitor","keywords":"","body":"Monitor Extension\nSummary\nExtension to monitor service invocation times and time taken for each service invocation.\nExtension Interface\n\ncom.alibaba.dubbo.monitor.MonitorFactory\ncom.alibaba.dubbo.monitor.Monitor\n\nExtension Configuration\n\n\n\nExisting Extension\ncom.alibaba.dubbo.monitor.support.dubbo.DubboMonitorFactory\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMonitorFactoryjava (MonitorFactory implementation)\n                |-XxxMonitor.java (Monitor implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.monitor.MonitorFactory (plain text file with the format: xxx=com.xxx.XxxMonitorFactory)\nXxxMonitorFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.MonitorFactory;\nimport com.alibaba.dubbo.monitor.Monitor;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxMonitorFactory implements MonitorFactory {\n    public Monitor getMonitor(URL url) {\n        return new XxxMonitor(url);\n    }\n}\n\nXxxMonitor.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.Monitor;\n\npublic class XxxMonitor implements Monitor {\n    public void count(URL statistics) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.monitor.MonitorFactory:\nxxx=com.xxx.XxxMonitorFactory\n\n"},"impls/extension-factory.html":{"url":"impls/extension-factory.html","title":"5.11 ExtensionFactory","keywords":"","body":"ExtensionFactory Extension\nSummary\nFactory to load dubbo extensions.\nExtension Interface\ncom.alibaba.dubbo.common.extension.ExtensionFactory\nExtension Configuration\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.extension.factory.SpiExtensionFactory\ncom.alibaba.dubbo.config.spring.extension.SpringExtensionFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExtensionFactory.java (ExtensionFactory implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.extension.ExtensionFactory (plain text file with the content: xxx=com.xxx.XxxExtensionFactory)\nXxxExtensionFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.extension.ExtensionFactory;\n\npublic class XxxExtensionFactory implements ExtensionFactory {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.extension.ExtensionFactory:\nxxx=com.xxx.XxxExtensionFactory\n\n"},"impls/proxy-factory.html":{"url":"impls/proxy-factory.html","title":"5.12 ProxyFactory","keywords":"","body":"ProxyFactory Extension\nSummary\nConvert Invoker into business interface.\nExtension Interface\ncom.alibaba.dubbo.rpc.ProxyFactory\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.rpc.proxy.JdkProxyFactory\ncom.alibaba.dubbo.rpc.proxy.JavassistProxyFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProxyFactory.java (ProxyFactory implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ProxyFactory (plain text file with the content: xxx=com.xxx.XxxProxyFactory)\nXxxProxyFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ProxyFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxProxyFactory implements ProxyFactory {\n    public  T getProxy(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public  Invoker getInvoker(T proxy, Class type, URL url) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ProxyFactory:\nxxx=com.xxx.XxxProxyFactory\n\n"},"impls/compiler.html":{"url":"impls/compiler.html","title":"5.13 Compiler","keywords":"","body":"Compiler Extension\nSummary\nJava compiler, used for byte code dynamic generation for RPC invocation.\nExtension Interface\ncom.alibaba.dubbo.common.compiler.Compiler\nExtension Configuration\nNo configuration required, the extension will be automatically discovered and loaded.\nExisting Extensions\n\ncom.alibaba.dubbo.common.compiler.support.JdkCompiler\ncom.alibaba.dubbo.common.compiler.support.JavassistCompiler\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCompiler.java (Compiler implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.compiler.Compiler (plain text file with the content: xxx=com.xxx.XxxCompiler)\nXxxCompiler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.compiler.Compiler;\n\npublic class XxxCompiler implements Compiler {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.compiler.Compiler:\nxxx=com.xxx.XxxCompiler\n\n"},"impls/dispatcher.html":{"url":"impls/dispatcher.html","title":"5.14 Dispatcher","keywords":"","body":"Dispatcher Extension\nSummary\nThread pool dispatch strategy.\nExtension Interface\ncom.alibaba.dubbo.remoting.Dispatcher\nExtension Configuration\n\n -->\n\n\nExisting Extensions\n\ncom.alibaba.dubbo.remoting.transport.dispatcher.all.AllDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxDispatcher.java (Dispatcher implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Dispatcher (plain text file with the content: xxx=com.xxx.XxxDispatcher)\nXxxDispatcher.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Dispatcher;\n\npublic class XxxDispatcher implements Dispatcher {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Dispatcher:\nxxx=com.xxx.XxxDispatcher\n\n"},"impls/threadpool.html":{"url":"impls/threadpool.html","title":"5.15 Threadpool","keywords":"","body":"ThreadPool Extension\nSummary\nThread pool strategy extension for service provider. When server receives one request, it needs a thread from thread pool to execute business logic in service provider.\nExtension Interface\ncom.alibaba.dubbo.common.threadpool.ThreadPool\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.threadpool.FixedThreadPool\ncom.alibaba.dubbo.common.threadpool.CachedThreadPool\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxThreadPool.java (ThreadPool implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.threadpool.ThreadPool (plain text file with the content: xxx=com.xxx.XxxThreadPool)\nXxxThreadPool.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.threadpool.ThreadPool;\nimport java.util.concurrent.Executor;\n\npublic class XxxThreadPool implements ThreadPool {\n    public Executor getExecutor() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.threadpool.ThreadPool:\nxxx=com.xxx.XxxThreadPool\n\n"},"impls/serialize.html":{"url":"impls/serialize.html","title":"5.16 Serialization","keywords":"","body":"Serialization Extension\nSummary\nExtension to serializing java object into byte code stream for transporting on the network, and vise versa.\nExtension Interface\n\ncom.alibaba.dubbo.common.serialize.Serialization\ncom.alibaba.dubbo.common.serialize.ObjectInput\ncom.alibaba.dubbo.common.serialize.ObjectOutput\n\nExtension Configuration\n\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.serialize.dubbo.DubboSerialization\ncom.alibaba.dubbo.common.serialize.hessian.Hessian2Serialization\ncom.alibaba.dubbo.common.serialize.java.JavaSerialization\ncom.alibaba.dubbo.common.serialize.java.CompactedJavaSerialization\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxSerialization.java (Serialization implementation)\n                |-XxxObjectInput.java (ObjectInput implementation)\n                |-XxxObjectOutput.java (ObjectOutput implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.serialize.Serialization (plain text file with the content: xxx=com.xxx.XxxSerialization)\nXxxSerialization.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.serialize.Serialization;\nimport com.alibaba.dubbo.common.serialize.ObjectInput;\nimport com.alibaba.dubbo.common.serialize.ObjectOutput;\n\n\npublic class XxxSerialization implements Serialization {\n    public ObjectOutput serialize(Parameters parameters, OutputStream output) throws IOException {\n        return new XxxObjectOutput(output);\n    }\n    public ObjectInput deserialize(Parameters parameters, InputStream input) throws IOException {\n        return new XxxObjectInput(input);\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.serialize.Serialization:\nxxx=com.xxx.XxxSerialization\n\n"},"impls/remoting.html":{"url":"impls/remoting.html","title":"5.17 Remoting","keywords":"","body":"Transporter Extension\nSummary\nTransportation extension for communication between server and client.\nExtension Interface\n\ncom.alibaba.dubbo.remoting.Transporter\ncom.alibaba.dubbo.remoting.Server\ncom.alibaba.dubbo.remoting.Client\n\nExtension Configuration\n\n \n\n \n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.remoting.transport.transporter.netty.NettyTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.mina.MinaTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.grizzly.GrizzlyTransporter\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTransporter.java (Transporter implementation)\n                |-XxxServer.java (Server implementation)\n                |-XxxClient.java (Client implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Transporter (plain text file with the content: xxx=com.xxx.XxxTransporter)\nXxxTransporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Transporter;\n\npublic class XxxTransporter implements Transporter {\n    public Server bind(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxServer(url, handler);\n    }\n    public Client connect(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxClient(url, handler);\n    }\n}\n\nXxxServer.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractServer;\n\npublic class XxxServer extends AbstractServer {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    public Collection getChannels() {\n        // ...\n    }\n    public Channel getChannel(InetSocketAddress remoteAddress) {\n        // ...\n    }\n}\n\nXxxClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractClient;\n\npublic class XxxClient extends AbstractClient {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    protected void doConnect() throws Throwable {\n        // ...\n    }\n    public Channel getChannel() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Transporter:\nxxx=com.xxx.XxxTransporter\n\n"},"impls/exchanger.html":{"url":"impls/exchanger.html","title":"5.18 Exchanger","keywords":"","body":"Exchanger Extension\nSummary\nExchange message between request and response on network transport layer.\nExtension Interface\n\ncom.alibaba.dubbo.remoting.exchange.Exchanger\ncom.alibaba.dubbo.remoting.exchange.ExchangeServer\ncom.alibaba.dubbo.remoting.exchange.ExchangeClient\n\nExtension Configuration\n\n -->\n\n\nExisting Extension\ncom.alibaba.dubbo.remoting.exchange.exchanger.HeaderExchanger\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExchanger.java (Exchanger implementation)\n                |-XxxExchangeServer.java (ExchangeServer implementation)\n                |-XxxExchangeClient.java (ExchangeClient implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.exchange.Exchanger (plain text file with the content: xxx=com.xxx.XxxExchanger)\nXxxExchanger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.Exchanger;\n\n\npublic class XxxExchanger implements Exchanger {\n    public ExchangeServer bind(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeServer(url, handler);\n    }\n    public ExchangeClient connect(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeClient(url, handler);\n    }\n}\n\nXxxExchangeServer.java:\n\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeServer;\n\npublic class XxxExchangeServer impelements ExchangeServer {\n    // ...\n}\n\nXxxExchangeClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeClient;\n\npublic class XxxExchangeClient impelments ExchangeClient {\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.exchange.Exchanger:\nxxx=com.xxx.XxxExchanger\n\n"},"impls/networker.html":{"url":"impls/networker.html","title":"5.19 Networker","keywords":"","body":"Networker Extension\nSummary\nExtension for peer to peer network grouping.\nExtension Interface\ncom.alibaba.dubbo.remoting.p2p.Networker\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.remoting.p2p.support.MulticastNetworker\ncom.alibaba.dubbo.remoting.p2p.support.FileNetworker\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxNetworker.java (Networker implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.p2p.Networker (plain text file with the content: xxx=com.xxx.XxxNetworker)\nXxxNetworker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.p2p.Networker;\n\npublic class XxxNetworker implements Networker {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.p2p.Networker:\nxxx=com.xxx.XxxNetworker\n\n"},"impls/telnet-handler.html":{"url":"impls/telnet-handler.html","title":"5.20 TelnetHandler","keywords":"","body":"TelnetHandler Extension\nSummary\nExtension to telnet command. All server should support telnet access for operation convenience.\nExtension Interface\ncom.alibaba.dubbo.remoting.telnet.TelnetHandler\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.remoting.telnet.support.ClearTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.ExitTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.HelpTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.StatusTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ListTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ChangeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CurrentTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.InvokeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.TraceTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CountTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.PortTelnetHandler\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTelnetHandler.java (TelnetHandler implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.telnet.TelnetHandler (plain text file with the content: xxx=com.xxx.XxxTelnetHandler)\nXxxTelnetHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.telnet.TelnetHandler;\n\n@Help(parameter=\"...\", summary=\"...\", detail=\"...\")\n\npublic class XxxTelnetHandler implements TelnetHandler {\n    public String telnet(Channel channel, String message) throws RemotingException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.telnet.TelnetHandler:\nxxx=com.xxx.XxxTelnetHandler\n\n用法\ntelnet 127.0.0.1 20880\ndubbo> xxx args\n\n"},"impls/status-checker.html":{"url":"impls/status-checker.html","title":"5.21 StatusChecker","keywords":"","body":"StatusChecker Extension\nSummary\nExtension to check status of resources service depends on. This status checker can be used in both telnet status command and status page.\nExtension Interface\ncom.alibaba.dubbo.common.status.StatusChecker\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.common.status.support.MemoryStatusChecker\ncom.alibaba.dubbo.common.status.support.LoadStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ServerStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ThreadPoolStatusChecker\ncom.alibaba.dubbo.registry.directory.RegistryStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.SpringStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.DataSourceStatusChecker\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxStatusChecker.java (StatusChecker implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.status.StatusChecker (plain text file with the content: xxx=com.xxx.XxxStatusChecker)\nXxxStatusChecker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.status.StatusChecker;\n\npublic class XxxStatusChecker implements StatusChecker {\n    public Status check() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.status.StatusChecker:\nxxx=com.xxx.XxxStatusChecker\n\n"},"impls/container.html":{"url":"impls/container.html","title":"5.22 Container","keywords":"","body":"Container Extension\nSummary\nService container extension, useful for loading custom contents.\nExtension Interface\ncom.alibaba.dubbo.container.Container\nExtension Configuration\njava com.alibaba.dubbo.container.Main spring jetty log4j\n\nExisting Extensions\n\ncom.alibaba.dubbo.container.spring.SpringContainer\ncom.alibaba.dubbo.container.spring.JettyContainer\ncom.alibaba.dubbo.container.spring.Log4jContainer\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxContainer.java (Container implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.Container (plain text file with the content: xxx=com.xxx.XxxContainer)\nXxxContainer.java:\npackage com.xxx;\n\ncom.alibaba.dubbo.container.Container;\n\n\npublic class XxxContainer implements Container {\n    public Status start() {\n        // ...\n    }\n    public Status stop() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.Container:\nxxx=com.xxx.XxxContainer\n\n"},"impls/page.html":{"url":"impls/page.html","title":"5.23 PageHandler","keywords":"","body":"Page Extension\nSummary\nExtension for page handler\nExtension Interface\ncom.alibaba.dubbo.container.page.PageHandler\nExtension Configuration\n\n -->\n\n\nExisting Extension\n\ncom.alibaba.dubbo.container.page.pages.HomePageHandler\ncom.alibaba.dubbo.container.page.pages.StatusPageHandler\ncom.alibaba.dubbo.container.page.pages.LogPageHandler\ncom.alibaba.dubbo.container.page.pages.SystemPageHandler\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxPageHandler.java (PageHandler implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.page.PageHandler (plain text file with the content: xxx=com.xxx.XxxPageHandler)\nXxxPageHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.container.page.PageHandler;\n\npublic class XxxPageHandler implements PageHandler {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.page.PageHandler:\nxxx=com.xxx.XxxPageHandler\n\n"},"impls/cache.html":{"url":"impls/cache.html","title":"5.24 Cache","keywords":"","body":"Cache Extension\nSummary\nCache the return value, use request parameter as the key.\nExtension Interface\ncom.alibaba.dubbo.cache.CacheFactory\nExtension Configuration\n\n\n \n没有配置cache属性时,使用此配置 -->\n -->\n\n\nExisting Extensions\n\ncom.alibaba.dubbo.cache.support.lru.LruCacheFactory\ncom.alibaba.dubbo.cache.support.threadlocal.ThreadLocalCacheFactory\ncom.alibaba.dubbo.cache.support.jcache.JCacheFactory\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCacheFactory.java (CacheFactory implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.cache.CacheFactory (plain text file with contents: xxx=com.xxx.XxxCacheFactory)\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.CacheFactory;\n\npublic class XxxCacheFactory implements CacheFactory {\n    public Cache getCache(URL url, String name) {\n        return new XxxCache(url, name);\n    }\n}\n\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.Cache;\n\npublic class XxxCache implements Cache {\n    public Cache(URL url, String name) {\n        // ...\n    }\n    public void put(Object key, Object value) {\n        // ...\n    }\n    public Object get(Object key) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.cache.CacheFactory:\nxxx=com.xxx.XxxCacheFactory\n\n"},"impls/validation.html":{"url":"impls/validation.html","title":"5.25 Validation","keywords":"","body":"Validation Extension\nSummary\nExtension for parameter validation.\nExtension Inteface\ncom.alibaba.dubbo.validation.Validation\nExtension Configuration\n\n -->\n\n\nExisting Extension\ncom.alibaba.dubbo.validation.support.jvalidation.JValidation\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxValidation.java (Validation implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.validation.Validation (plain text file with the content: xxx=com.xxx.XxxValidation)\nXxxValidation.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validation;\n\npublic class XxxValidation implements Validation {\n    public Object getValidator(URL url) {\n        // ...\n    }\n}\n\nXxxValidator.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validator;\n\npublic class XxxValidator implements Validator {\n    public XxxValidator(URL url) {\n        // ...\n    }\n    public void validate(Invocation invocation) throws Exception {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.validation.Validation:\nxxx=com.xxx.XxxValidation\n\n"},"impls/logger-adapter.html":{"url":"impls/logger-adapter.html","title":"5.26 LoggerAdapter","keywords":"","body":"LoggerAdapter Extension\nSummary\nExtension for adapting logger output\nExtension Interface\ncom.alibaba.dubbo.common.logger.LoggerAdapter\nExtension Configuration\n\n\nOr:\n-Ddubbo:application.logger=xxx\n\nExisting Extension\n\ncom.alibaba.dubbo.common.logger.slf4j.Slf4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jcl.JclLoggerAdapter\ncom.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jdk.JdkLoggerAdapter\n\nExtension Guide\nDirectory layout:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoggerAdapter.java (LoggerAdapter implementation)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.logger.LoggerAdapter (plain text file with the content: xxx=com.xxx.XxxLoggerAdapter)\nXxxLoggerAdapter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.LoggerAdapter;\n\npublic class XxxLoggerAdapter implements LoggerAdapter {\n    public Logger getLogger(URL url) {\n        // ...\n    }\n}\n\nXxxLogger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.Logger;\n\npublic class XxxLogger implements Logger {\n    public XxxLogger(URL url) {\n        // ...\n    }\n    public void info(String msg) {\n        // ...\n    }\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.logger.LoggerAdapter:\nxxx=com.xxx.XxxLoggerAdapter\n\n"},"contract.html":{"url":"contract.html","title":"6 Contract","keywords":"","body":"Public Agreement\nThis document is Dubbo public agreement, we expect all extension points comply with it.\nURL\n\nAll extension points must include URL parameter, design URL as a context information which throughouts the whole extension point design system.\nURL standard style: protocol://username:password@host:port/path?key=value&key=value\n\nLogging\n\nPrint ERROR log for unrecoverable and NEED TO ALARM situation.\nPrint WARN log for recoverable exception or transient state inconsistency.\nPrint INFO log for normally status.\n\n"},"coding.html":{"url":"coding.html","title":"7 Code Style","keywords":"","body":"Coding convention\nCode style\nThe source and JavaDoc of Dubbo follow below specifications:\n\nCode Conventions for the Java Programming Language\nHow to Write Doc Comments for the Javadoc Tool\n\nException and Logging\n\nLog more context information as possible, such as error reason, error server address, client address, registry center address, dubbo version and so on.\nTry to put the main cause at the front, and display all other context information with key-value paris after it.\nLog is not printed where the exception is thrown, log level is determined by the final exception handler, and must print log when dicarding exception.\nERROR log means NEED TO ALARM, WARN log means COULD AUTO RECOVERY, INFO long mean NORMAL.\nSuggestion: config ERROR log in Monitor center for real-time alarm, summary and send WARN log weekly.\nRpcException is the ONLY external exception of Dubbo,all internal exceptions mush be transfered to RpcException if need to throw out to user.\nRpcException CAN NOT have sub-class, all types of information are identified with ErrorCode in order to keep compatible.\n\nConfiguration and URL\n\nUse initials and camelCase for multiple words for object properties 1.\nUse lowercase and split by '-' for multiple words for config properties 2.\nUse lowercase and split by '.' for multiple words for URL properties 3.\nUse URL transfer parameters as possible, Don't define Map or other types, config information also transfer to URL style.\nMinimize URL nesting to keep URL simplicity.\n\nUnit testing and integration testing\n\nUse JUnit and EasyMock for unit testing, use TestNG for integration testing, use DBUnit for database testing.\nDon't put large integration test case in unit testing for running speed of unit test case.\nUse try...finally or tearDown to release resource for all test cases of unit testing.\nMinimize test case that with while loop which need waiting repsonse, use to make the logic in timer as function for timer and net testing.\nFor fail-safe testing, unified use LogUtil assertion log output.\n\nExtension point base class and AOP\n\nAOP class should be named as XxxWrapper,Base class should be named as AbstractXxx.\nUse AOP for combine relationship between extension points, ExtensionLoader only loads extension points, including AOP extension.\nTry to use Ioc inject dependency of extension points, Don't direct dependent on factory method of ExtensionLoader.\nTry to use AOP implement the common action of extension points, instead of using base class, such as the isAvailable checking before load balancing, which is independent of load balance. Close the URL paramters which no need to check.\nUse base class for abstaction for a variety of similar types, such as RMI, Hessian 3rd protocols which have generated interface proxy, only transfer interface proxy to Invoker to complete bridging, and public base class can do the logic.\nThe base class is also part of the SPI, and each extension should have a convenient base class support.\n\nModule and packaging\n\nBase on reusability for packaging, dividing the interface, base class and large implementation into separate modules.\nPut all interfaces under the base package of module, and put base classes in support subpackage, different implementations are placed under the subpackage named by extension point.\nTry to keep subpackage dependent on parent package, NOT reverse.\n\n\n1. Java convention ↩\n\n\n2. Spring convention ↩\n\n\n3. Dubbo convention ↩\n\n"},"release.html":{"url":"release.html","title":"9 Versions","keywords":"","body":"Versions\nNew feature development and stability improvement are equally important to product. But adding new features will affect stability, dubbo uses the following version development pattern to achieve a good balance.\nTwo versions evolving at the same time\n\nBugFix Version:low version,e.g. 2.4.x. This is called the GA version, which can be applied in production. We are supposed only to fix bugs in this version, and increase the third version number when release.\nFeature Version:high version, e.g. 2.5.x. We add new features to this version, so applications have opportunities try new features.\n\nWhen features in 2.5.x are proved stable enough, we will announce 2.5.x as a beta release. \nWhen 2.5.x proved stable after enough test on enough applications:\n\n2.5.x, the GA Version, only do BugFix, the main version to be used. We can try to promote applications to upgrade to GA at the desired time.\n2.4.x, no longer maintained. When bugs appear, applications have no choice but upgrade to the latest stable version- Sunset Clause\nWe create a new branch 2.6.0 based on 2.5.x for new features.\n\nPros\n\nGA Version are promised stable:\nonly BugFix\nGA Version got enough tests before promotion\n\n\nNew features can respond quickly in Feature Version and allow applications to try that\nSignificantly reduces development and maintenance costs \n\nThe responsibilities of users\nUsers should always keep in track with the GA Version, make sure all bugs were fixed.\nThere is a fake proposition: regular upgrades bring more risks. Here's the reasons:\n\nGA remains stable after a trial period.\nBugs find on GA will be fixed immediately.\nComparing with the on-need-upgrade (only upgrade when find a serious problem, and may span multiple versions), upgrade periodically can flat risk. Experienced a long cycle of large projects, students will have such an experience, the tripartite library version does not upgrade for a long time, the result of the problem had to upgrade to the new version (across multiple versions) a huge risk.\n\n"},"contribution.html":{"url":"contribution.html","title":"10 Contribution","keywords":"","body":"\ntable {\n  width: 100%;\n  max-width: 65em;\n  border: 1px solid #dedede;\n  margin: 15px auto;\n  border-collapse: collapse;\n  empty-cells: show;\n}\ntable th,\ntable td {\n  height: 35px;\n  border: 1px solid #dedede;\n  padding: 0 10px;\n}\ntable th {\n  font-weight: bold;\n  text-align: center !important;\n  background: rgba(158,188,226,0.2);\n  white-space: nowrap;\n}\ntable tbody tr:nth-child(2n) {\n  background: rgba(158,188,226,0.12);\n}\ntable td:nth-child(1) {\n  white-space: nowrap;\n}\ntable tr:hover {\n  background: #efefef;\n}\n.table-area {\n  overflow: auto;\n}\n\n\n\n[].slice.call(document.querySelectorAll('table')).forEach(function(el){\n    var wrapper = document.createElement('div');\n    wrapper.className = 'table-area';\n    el.parentNode.insertBefore(wrapper, el);\n    el.parentNode.removeChild(el);\n    wrapper.appendChild(el);\n})\n\nContribution\nFlow\n\nDirect adding new project, black-box dependent on Dubbo for function extension.\nFork Dubbo on Github for BUG fixing or modify the framework.\nPull Request after changing.\n\nTasks\n\n\n\nFuncation\nType\nPriority\nStatus\nClaimer\nPlan complete time\nprogress\n\n\n\n\n Translation\nDocument\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\n translation\nDocument\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nExtension point compatibility testing\nTesting\nHigh\nClaimed\n罗立树\nPending\n0%\n\n\nPerformance benchmark testing\nTesting\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nFunctional unit testing\nTesting\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nJTA/XA distributed transaction\nInterceptor extension\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nThrift\nProtocol extension\nHigh\nDeveloping done\n闾刚\n2012-04-27\n90%\n\n\nICE\nProtocol extension\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nACE\nProtocol extension\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nJSON-RPC\nProtocol extension\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nXML-RPC\nProtocol extension\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nJSR181&CXF(WebService)\nProtocol extension\nHigh\nDeveloping done\n白文志\n2012-04-27\n90%\n\n\nJSR311&JSR339(RestfulWebService)\nProtocol extension\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nJMS&ActiveMQ\nProtocol extension\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nProtobuf\nSerialization extension\nHigh\nResearching\n朱启恒\n2012-02-30\n20%\n\n\nAvro\nSerialization extension\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nXSocket\nTransmission extension\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nCGLib\nDynamic proxy extension\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nJNDI\nRegistry extension\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nLDAP\nRegistry extension\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nJSR140&SLP\nRegistry extension\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nUDDI\nRegistry extension\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nJMX\nMonitoring expansion\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nSNMP\nMonitoring expansion\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nCacti\nMonitoring expansion\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nNagios\nMonitoring expansion\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nLogstash\nMonitoring expansion\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nJRobin\nMonitoring expansion\nHigh\nUnclaimed\nPending\nPending\n0%\n\n\nMaven\nPackage management\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nSubversion\nPackage management\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nJCR/JSR283\nPackage management\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nSimpleDeployer\nLocal deployment agent\nLow\nUnclaimed\nPending\nPending\n0%\n\n\nSimpleScheduler\nScheduler\nLow\nUnclaimed\nPending\nPending\n0%\n\n\n\n"},"checklist.html":{"url":"checklist.html","title":"11 Checklist","keywords":"","body":"Checklist\nChecklist before release\n\ngithub milestones\ngithub change lists\nTravis CI\ntest code\nfind bugs\n\nChecklist for bigfix versions\n\nCreate a github issue before coding\nCreate unit test before bugfix\nReview\nTest your code (Normal process / Abnormal process)\nRecord your design on github issue\nComplete javadoc and comment in code\nManager for every version, responsible for scope and check\n\n"},"code-smell.html":{"url":"code-smell.html","title":"12 Code Smell","keywords":"","body":"Bad Smell\nUgly Dubbo design or implementation will be record here.\nURL Convertion\n1. Point to Point Service export and refer\nservice directly export:\nEXPORT(dubbo://provider-address/com.xxx.XxxService?version=1.0.0\")\nservice directly refer:\nREFER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n2. Export servie by registry\nexport service to registry:\nEXPORT(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&export=ENCODE(dubbo://provider-address/com.xxx.XxxService?version=1.0.0))\naccquire registry:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\nregistry service address:\nurl.getParameterAndDecoded(\"export\"))\nREGISTER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n3. Refer service from registry\nrefer service from registry:\nREFER(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&refer=ENCODE(version=1.0.0))\naccquire registry:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\nsubscribe service address:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nSUBSCRIBE(dubbo://registry-address/com.xxx.XxxService?version=1.0.0)\nnotify service address:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nNOTIFY(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n4. Registry push route rule\nregistry push route rule:\nNOTIFY(route://registry-address/com.xxx.XxxService?router=script&type=js&rule=ENCODE(function{...}))\naccquire routers:\nurl.setProtocol(url.getParameter(\"router\", \"script\"))\nGETROUTE(script://registry-address/com.xxx.XxxService?type=js&rule=ENCODE(function{...}))\n5. Load route rule from file\nload route rule from file:\nGETROUTE(file://path/file.js?router=script)\naccquire routers:\nurl.setProtocol(url.getParameter(\"router\", \"script\")).addParameter(\"type\", SUFFIX(file)).addParameter(\"rule\", READ(file))\nGETROUTE(script://path/file.js?type=js&rule=ENCODE(function{...}))\nInvoke parameters\n\npath      service path\ngroup    service group\nversion  service version\ndubbo   current dubbo release version\ntoken    verify token\ntimeout   invocation timeout\n\nSPI Loading\n1. SPI Auto Adaptive\nWhen ExtensionLoader loads SPI, It will check spi attributes(using set method) . If one attribute is SPI, ExtensionLoader  will load the SPI implementation. Auto injected object is an adaptive instance(proxy) ,because the real implementation is confirmed only in execution stage.。when adaptive spi is invoked, Dubbo will choose the real implementation and executes it. Dubbo choose the right implementation according to the parameters that the mehod defines.\nAll the inner SPIs that  Dubbo defines have the URL  parameter defined for the method invocation. Adaptive SPI uses URL to determine which implementation is needed. One specific Key and Value in the URL confirms the usage of the specific implementation, All these is done by adding @Adaptive  annotation.\n@Extension\npublic interface Car {\n    @Adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\", \"http://10.20.160.198/wiki/display/dubbo/transport.type\"})\n    public run(URL url, Type1 arg1, Type2 arg2);\n}\n\nFor the rules above,ExtensionLoader  will create a adaptive instance for each SPI injected.\nExtensionLoader generated adaptive classes  look like :\npackage ;\n\npublic class $Adpative implements  {\n    public () {\n        if(parameters containing URL Type?) using URL parameter\n        else if(method returns URL) using the return URL\n        # \n\n        if(URL accquired == null) {\n            throw new IllegalArgumentException(\"url == null\");\n        }\n\n        According to the Key order from @Adaptive annotation,get the Value from the URL as the real SPI name\n        if no value is found then use the default SPI implementation。If no SPI point, throw new IllegalStateException(\"Fail to get extension\");\n\n        Invoke the method using the spi and return the result.\n    }\n\n    public () {\n        throw new UnsupportedOperationException(\"is not adaptive method!\");\n    }\n}\n\n@Adaptive  annotation usage:\nIf no value is configed for those Keys in URL,default SPI implementation is used。For example ,String[] {\"key1\", \"key2\"},firstly Dubbo will look up value for key1 and use it as SPI name;if key1 value is not founded then look up for key2,if value of key2 is also not found ,then use default spi implementation. If no default implementation is configed, then the method will throw IllegalStateException。if not configed , then default implement is lower case of the interface class full package name. For Extension interface com.alibaba.dubbo.xxx.YyyInvokerWrapper , default value is new String[] {\"yyy.invoker.wrapper\"}\nCallback Function\n1. Parameter Callback\nmain theory : in the persistent connection for one consumer->provider,export a service in  Consumer side,provider  side can reversely call the instance in consumer side.\nImplement details:\n\nFor exchanging interface instance in transmition, auto export and auto refer is implemented in DubboCodec . Need to seperate business logic and codec logic.\nyou will need to judge whether needing callback when getting exporter from invocation,if needed, get the callback instance id from the attachments. By using this method, consumer side can implement the callback interface with different implementations.\n\n2. Event Notification\nmain theory : when Consumer  executing invoke method,judging if any configuration for  onreturn/onerror... put  the method for onreturn to the callback list of the async invocatioin.\nImplement details:parameters is passed using URL,but string-object is not supported for URL, so the method is stored in  staticMap,it needs to be optimized.\nLazy Connection\nDubboProtocol  specific features, default disabled\nWhen client creating proxy for server, do not establish TCP persistent connection at first, only init the connecton when data is needing transmision.\nThis feather will disable the connection retry policy , resend the data again(if connection is lost when sending data ,try to establish a new connection to send data)\nShare Connection\nDubboProtocol specific features, default enabled。\nJVM A export many services,JVM B  refer more than one services of A,Share Connection means those different services invocations between A and B uses the same TCP connection  to transmit data, reducing server connections.\nImplement details:when using share connection for the same address,you need pay more attention to the invoker's destroy action.on one hand, you should close the connection when all the invokers refering the same address is destroyed, on another hand ,you should not close the connection when not all of the invokers are destroyed. In design implementation, we uses a strategy called reference count , we create a connection called Lazy connection for exceptions not affacting business when closing the connection just in case.\nsticky policy\nwhen existing many providers and configing the sticky policy,invocation will be sent to the same provider as last invocation. Sticky Policy opens the lazy attribute of connection, for avoiding open useless connectons.\nprovider selecting logic\n\nexisting multi providers,firstly select by Loadbalance 。If the selected  provider is available ,then just doing the invocation\nIf the selected provider is not available in stage 1, then choose from the remaining ,if available then doing the inovation\nIf all providers are not available , rescan the list(not choosen invoker first),juding if any provider is available, if existing,doing the invocatiion.\nIf no available provider in stage 3, then the next invoker of the invoker of stage 1 will be choosen(if not the last one),avoiding collision.\n\n"},"TCK.html":{"url":"TCK.html","title":"13 TCK","keywords":"","body":"Compatibility test\nDubbo's protocol, communication, serialization, registry, load balancing and other SPI all offer alternative strategies for different application scenarios while our test cases are very scattered. Ours is always uncertain whether it can satisfy the complete contract of the extension point when users need to add a new implementation.     \nThus we need to use TCK (Technology Compatibility Kit) for the core extension points.  When users add a new implementaion, compatibility with the rest of the framework can be ensured with TCK. This can effectively improve the overall health and also facilitate the access of the third party extenders, which accelerates the maturity of the open source community.\nXingzhi from the open source community is already working on this part. His preliminary idea is to build a TCK framework for Dubbo drawing on the CDI-TCK of JBoss first, then realize the TCK implementing case of Dubbo. \nReference:http://docs.jboss.org/cdi/tck/reference/1.0.1-Final/html/introduction.html\nAnyone interested  is welcomed to work on this together. \nProtocol TCK\n\nTODO\n\nRegistry TCK\n\nTODO\n\n"}}}
\ No newline at end of file
diff --git a/books/dubbo-dev-book-en/sources/images/close-expand.jpg b/books/dubbo-dev-book-en/sources/images/close-expand.jpg
new file mode 100644
index 00000000..58a72cee
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/close-expand.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/configuration-override.png b/books/dubbo-dev-book-en/sources/images/configuration-override.png
new file mode 100644
index 00000000..39afaad0
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/configuration-override.png differ
diff --git a/books/dubbo-dev-book-en/sources/images/ddd.jpg b/books/dubbo-dev-book-en/sources/images/ddd.jpg
new file mode 100644
index 00000000..f32972af
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/ddd.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/design-step1.png b/books/dubbo-dev-book-en/sources/images/design-step1.png
new file mode 100644
index 00000000..cef59da7
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/design-step1.png differ
diff --git a/books/dubbo-dev-book-en/sources/images/design-step2.png b/books/dubbo-dev-book-en/sources/images/design-step2.png
new file mode 100644
index 00000000..f1d9046a
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/design-step2.png differ
diff --git a/books/dubbo-dev-book-en/sources/images/design-step3.png b/books/dubbo-dev-book-en/sources/images/design-step3.png
new file mode 100644
index 00000000..bee3f5f2
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/design-step3.png differ
diff --git a/books/dubbo-dev-book-en/sources/images/design-step4.png b/books/dubbo-dev-book-en/sources/images/design-step4.png
new file mode 100644
index 00000000..66ca86f0
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/design-step4.png differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo-export.jpg b/books/dubbo-dev-book-en/sources/images/dubbo-export.jpg
new file mode 100644
index 00000000..b4d83a33
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo-export.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo-extension.jpg b/books/dubbo-dev-book-en/sources/images/dubbo-extension.jpg
new file mode 100644
index 00000000..5ebe3c94
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo-extension.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo-framework.jpg b/books/dubbo-dev-book-en/sources/images/dubbo-framework.jpg
new file mode 100644
index 00000000..005408a5
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo-framework.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo-modules.jpg b/books/dubbo-dev-book-en/sources/images/dubbo-modules.jpg
new file mode 100644
index 00000000..946cb094
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo-modules.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo-protocol.jpg b/books/dubbo-dev-book-en/sources/images/dubbo-protocol.jpg
new file mode 100644
index 00000000..181f60cd
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo-protocol.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo-refer.jpg b/books/dubbo-dev-book-en/sources/images/dubbo-refer.jpg
new file mode 100644
index 00000000..6154b7f7
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo-refer.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo-relation.jpg b/books/dubbo-dev-book-en/sources/images/dubbo-relation.jpg
new file mode 100644
index 00000000..edd9c2a6
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo-relation.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo_protocol_header.jpg b/books/dubbo-dev-book-en/sources/images/dubbo_protocol_header.jpg
new file mode 100644
index 00000000..c48ddb43
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo_protocol_header.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo_rpc_export.jpg b/books/dubbo-dev-book-en/sources/images/dubbo_rpc_export.jpg
new file mode 100644
index 00000000..0800c8bf
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo_rpc_export.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo_rpc_invoke.jpg b/books/dubbo-dev-book-en/sources/images/dubbo_rpc_invoke.jpg
new file mode 100644
index 00000000..fda28cf8
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo_rpc_invoke.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/dubbo_rpc_refer.jpg b/books/dubbo-dev-book-en/sources/images/dubbo_rpc_refer.jpg
new file mode 100644
index 00000000..a70d08b8
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/dubbo_rpc_refer.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/event-listener.jpg b/books/dubbo-dev-book-en/sources/images/event-listener.jpg
new file mode 100644
index 00000000..ea67d8aa
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/event-listener.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/filter-chain.jpg b/books/dubbo-dev-book-en/sources/images/filter-chain.jpg
new file mode 100644
index 00000000..1e0e8b48
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/filter-chain.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/mix-api-spi.jpg b/books/dubbo-dev-book-en/sources/images/mix-api-spi.jpg
new file mode 100644
index 00000000..60daa63e
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/mix-api-spi.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/open-expand.jpg b/books/dubbo-dev-book-en/sources/images/open-expand.jpg
new file mode 100644
index 00000000..c686be38
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/open-expand.jpg differ
diff --git a/books/dubbo-dev-book-en/sources/images/seperate-api-spi.jpg b/books/dubbo-dev-book-en/sources/images/seperate-api-spi.jpg
new file mode 100644
index 00000000..ec6823c8
Binary files /dev/null and b/books/dubbo-dev-book-en/sources/images/seperate-api-spi.jpg differ
diff --git a/books/dubbo-dev-book/SPI.html b/books/dubbo-dev-book/SPI.html
index f891a0ea..f2bbef4f 100644
--- a/books/dubbo-dev-book/SPI.html
+++ b/books/dubbo-dev-book/SPI.html
@@ -968,7 +968,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"3 扩展点加载","level":"1.4","depth":1,"next":{"title":"4 实现细节","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"previous":{"title":"2 框架设计","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"SPI.md","mtime":"2017-12-26T02:28:05.751Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"3 扩展点加载","level":"1.4","depth":1,"next":{"title":"4 实现细节","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"previous":{"title":"2 框架设计","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"SPI.md","mtime":"2018-03-19T06:46:50.899Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/TCK.html b/books/dubbo-dev-book/TCK.html
index f111d76e..e3ab90c0 100644
--- a/books/dubbo-dev-book/TCK.html
+++ b/books/dubbo-dev-book/TCK.html
@@ -808,7 +808,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"13 技术兼容性测试","level":"1.14","depth":1,"previous":{"title":"12 坏味道","level":"1.13","depth":1,"path":"code-smell.md","ref":"./code-smell.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"TCK.md","mtime":"2017-12-26T02:28:05.752Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"13 技术兼容性测试","level":"1.14","depth":1,"previous":{"title":"12 坏味道","level":"1.13","depth":1,"path":"code-smell.md","ref":"./code-smell.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"TCK.md","mtime":"2018-03-19T06:46:50.899Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/build.html b/books/dubbo-dev-book/build.html
index d887e898..98e38a5e 100644
--- a/books/dubbo-dev-book/build.html
+++ b/books/dubbo-dev-book/build.html
@@ -760,10 +760,10 @@ <h1>
                                 <h1 id="&#x6E90;&#x7801;&#x6784;&#x5EFA;">&#x6E90;&#x7801;&#x6784;&#x5EFA;</h1>
 <h2 id="&#x4EE3;&#x7801;&#x7B7E;&#x51FA;">&#x4EE3;&#x7801;&#x7B7E;&#x51FA;</h2>
 <p>&#x901A;&#x8FC7;&#x4EE5;&#x4E0B;&#x7684;&#x8FD9;&#x4E2A;&#x547D;&#x4EE4;&#x7B7E;&#x51FA;&#x6700;&#x65B0;&#x7684;&#x9879;&#x76EE;&#x6E90;&#x7801; <sup><a href="#fn_1" id="reffn_1">1</a></sup>&#xFF1A;</p>
-<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/alibaba/dubbo dubbo
+<pre><code class="lang-sh">git <span class="hljs-built_in">clone</span> https://github.com/apache/incubator-dubbo.git dubbo
 </code></pre>
 <h2 id="&#x5206;&#x652F;">&#x5206;&#x652F;</h2>
-<p>&#x6211;&#x4EEC;&#x4F7F;&#x7528; master &#x4F5C;&#x4E3A;&#x4E3B;&#x5E72;&#x7248;&#x672C;&#x7684;&#x5F00;&#x53D1;&#xFF0C;&#x4F7F;&#x7528;&#x5206;&#x652F;&#x4F5C;&#x4E3A;&#x7EF4;&#x62A4;&#x7248;&#x672C;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; <a href="https://github.com/alibaba/dubbo/tags" target="_blank">https://github.com/alibaba/dubbo/tags</a> &#x6765;&#x67E5;&#x770B;&#x6240;&#x6709;&#x7248;&#x672C;&#x7684;&#x6807;&#x7B7E;&#x3002;</p>
+<p>&#x6211;&#x4EEC;&#x4F7F;&#x7528; master &#x4F5C;&#x4E3A;&#x4E3B;&#x5E72;&#x7248;&#x672C;&#x7684;&#x5F00;&#x53D1;&#xFF0C;&#x4F7F;&#x7528;&#x5206;&#x652F;&#x4F5C;&#x4E3A;&#x7EF4;&#x62A4;&#x7248;&#x672C;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; <a href="https://github.com/apache/incubator-dubbo/tags" target="_blank">https://github.com/apache/incubator-dubbo/tags</a> &#x6765;&#x67E5;&#x770B;&#x6240;&#x6709;&#x7248;&#x672C;&#x7684;&#x6807;&#x7B7E;&#x3002;</p>
 <h2 id="&#x6784;&#x5EFA;">&#x6784;&#x5EFA;</h2>
 <p>Dubbo &#x4F7F;&#x7528; <a href="http://maven.apache.org" target="_blank">maven</a> &#x4F5C;&#x4E3A;&#x6784;&#x5EFA;&#x5DE5;&#x5177;&#x3002;</p>
 <p>&#x8981;&#x6C42;</p>
@@ -798,7 +798,7 @@ <h3 id="eclipse">eclipse</h3>
 <pre><code class="lang-sh">mvn eclipse:configure-workspace -Declipse.workspace=/path/to/the/workspace/
 </code></pre>
 <blockquote id="fn_1">
-<sup>1</sup>. &#x4E5F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5728; <a href="https://github.com/alibaba/dubbo" target="_blank">https://github.com/alibaba/dubbo</a> &#x4E0A;&#x6D4F;&#x89C8;&#x6E90;&#x4EE3;&#x7801;<a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
+<sup>1</sup>. &#x4E5F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5728; <a href="https://github.com/apache/incubator-dubbo" target="_blank">https://github.com/apache/incubator-dubbo</a> &#x4E0A;&#x6D4F;&#x89C8;&#x6E90;&#x4EE3;&#x7801;<a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
 </blockquote>
 <blockquote id="fn_2">
 <sup>2</sup>. UNIX &#x4E0B;&#x7684;&#x8DEF;&#x5F84;&#x662F; ${HOME}/.m2/repository, Windows &#x4E0B;&#x7684;&#x8DEF;&#x5F84;&#x662F; C:\Documents and Settings\<user>.m2\repository<a href="#reffn_2" title="Jump back to footnote [2] in the text."> &#x21A9;</a>
@@ -846,7 +846,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"1 源码构建","level":"1.2","depth":1,"next":{"title":"2 框架设计","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"build.md","mtime":"2017-12-26T02:28:05.753Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"1 源码构建","level":"1.2","depth":1,"next":{"title":"2 框架设计","level":"1.3","depth":1,"path":"design.md","ref":"./design.md","articles":[]},"previous":{"title":"Introduction","level":"1.1","depth":1,"path":"README.md","ref":"README.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"build.md","mtime":"2018-04-13T06:52:30.932Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/checklist.html b/books/dubbo-dev-book/checklist.html
index 8d382cfc..3955a193 100644
--- a/books/dubbo-dev-book/checklist.html
+++ b/books/dubbo-dev-book/checklist.html
@@ -827,7 +827,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"11 检查列表","level":"1.12","depth":1,"next":{"title":"12 坏味道","level":"1.13","depth":1,"path":"code-smell.md","ref":"./code-smell.md","articles":[]},"previous":{"title":"10 贡献","level":"1.11","depth":1,"path":"contribution.md","ref":"./contribution.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"checklist.md","mtime":"2017-12-26T02:28:05.753Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"11 检查列表","level":"1.12","depth":1,"next":{"title":"12 坏味道","level":"1.13","depth":1,"path":"code-smell.md","ref":"./code-smell.md","articles":[]},"previous":{"title":"10 贡献","level":"1.11","depth":1,"path":"contribution.md","ref":"./contribution.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"checklist.md","mtime":"2018-03-19T06:46:50.900Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/code-smell.html b/books/dubbo-dev-book/code-smell.html
index 57d4189b..a4fac5e5 100644
--- a/books/dubbo-dev-book/code-smell.html
+++ b/books/dubbo-dev-book/code-smell.html
@@ -915,7 +915,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"12 坏味道","level":"1.13","depth":1,"next":{"title":"13 技术兼容性测试","level":"1.14","depth":1,"path":"TCK.md","ref":"./TCK.md","articles":[]},"previous":{"title":"11 检查列表","level":"1.12","depth":1,"path":"checklist.md","ref":"./checklist.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"code-smell.md","mtime":"2017-12-26T02:28:05.754Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"12 坏味道","level":"1.13","depth":1,"next":{"title":"13 技术兼容性测试","level":"1.14","depth":1,"path":"TCK.md","ref":"./TCK.md","articles":[]},"previous":{"title":"11 检查列表","level":"1.12","depth":1,"path":"checklist.md","ref":"./checklist.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"code-smell.md","mtime":"2018-03-19T06:46:50.900Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/coding.html b/books/dubbo-dev-book/coding.html
index 38534095..7d7b2117 100644
--- a/books/dubbo-dev-book/coding.html
+++ b/books/dubbo-dev-book/coding.html
@@ -857,7 +857,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"7 编码约定","level":"1.8","depth":1,"next":{"title":"8 设计原则","level":"1.9","depth":1,"path":"principals/introduction.md","ref":"./principals/introduction.md","articles":[{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]}]},"previous":{"title":"6 公共契约","level":"1.7","depth":1,"path":"contract.md","ref":"./contract.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"coding.md","mtime":"2017-12-26T02:28:05.755Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"7 编码约定","level":"1.8","depth":1,"next":{"title":"8 设计原则","level":"1.9","depth":1,"path":"principals/introduction.md","ref":"./principals/introduction.md","articles":[{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]}]},"previous":{"title":"6 公共契约","level":"1.7","depth":1,"path":"contract.md","ref":"./contract.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"coding.md","mtime":"2018-03-19T06:46:50.901Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/contract.html b/books/dubbo-dev-book/contract.html
index 8230ebce..957e6399 100644
--- a/books/dubbo-dev-book/contract.html
+++ b/books/dubbo-dev-book/contract.html
@@ -813,7 +813,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6 公共契约","level":"1.7","depth":1,"next":{"title":"7 编码约定","level":"1.8","depth":1,"path":"coding.md","ref":"./coding.md","articles":[]},"previous":{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"contract.md","mtime":"2017-12-26T02:28:05.757Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6 公共契约","level":"1.7","depth":1,"next":{"title":"7 编码约定","level":"1.8","depth":1,"path":"coding.md","ref":"./coding.md","articles":[]},"previous":{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"contract.md","mtime":"2018-03-19T06:46:50.901Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/contribution.html b/books/dubbo-dev-book/contribution.html
index 701e29a1..23725558 100644
--- a/books/dubbo-dev-book/contribution.html
+++ b/books/dubbo-dev-book/contribution.html
@@ -1120,7 +1120,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"10 贡献","level":"1.11","depth":1,"next":{"title":"11 检查列表","level":"1.12","depth":1,"path":"checklist.md","ref":"./checklist.md","articles":[]},"previous":{"title":"9 版本管理","level":"1.10","depth":1,"path":"release.md","ref":"./release.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"contribution.md","mtime":"2017-12-26T02:28:05.758Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"10 贡献","level":"1.11","depth":1,"next":{"title":"11 检查列表","level":"1.12","depth":1,"path":"checklist.md","ref":"./checklist.md","articles":[]},"previous":{"title":"9 版本管理","level":"1.10","depth":1,"path":"release.md","ref":"./release.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"contribution.md","mtime":"2018-03-19T06:46:50.902Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/design.html b/books/dubbo-dev-book/design.html
index a4b8f70b..dbc84687 100644
--- a/books/dubbo-dev-book/design.html
+++ b/books/dubbo-dev-book/design.html
@@ -774,7 +774,7 @@ <h2 id="&#x5404;&#x5C42;&#x8BF4;&#x660E;">&#x5404;&#x5C42;&#x8BF4;&#x660E;</h2>
 <li><strong>registry &#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#x5C42;</strong>&#xFF1A;&#x5C01;&#x88C5;&#x670D;&#x52A1;&#x5730;&#x5740;&#x7684;&#x6CE8;&#x518C;&#x4E0E;&#x53D1;&#x73B0;&#xFF0C;&#x4EE5;&#x670D;&#x52A1; URL &#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>RegistryFactory</code>, <code>Registry</code>, <code>RegistryService</code></li>
 <li><strong>cluster &#x8DEF;&#x7531;&#x5C42;</strong>&#xFF1A;&#x5C01;&#x88C5;&#x591A;&#x4E2A;&#x63D0;&#x4F9B;&#x8005;&#x7684;&#x8DEF;&#x7531;&#x53CA;&#x8D1F;&#x8F7D;&#x5747;&#x8861;&#xFF0C;&#x5E76;&#x6865;&#x63A5;&#x6CE8;&#x518C;&#x4E2D;&#x5FC3;&#xFF0C;&#x4EE5; <code>Invoker</code> &#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>Cluster</code>, <code>Directory</code>, <code>Router</code>, <code>LoadBalance</code></li>
 <li><strong>monitor &#x76D1;&#x63A7;&#x5C42;</strong>&#xFF1A;RPC &#x8C03;&#x7528;&#x6B21;&#x6570;&#x548C;&#x8C03;&#x7528;&#x65F6;&#x95F4;&#x76D1;&#x63A7;&#xFF0C;&#x4EE5; <code>Statistics</code> &#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>MonitorFactory</code>, <code>Monitor</code>, <code>MonitorService</code></li>
-<li><strong>protocol &#x8FDC;&#x7A0B;&#x8C03;&#x7528;&#x5C42;</strong>&#xFF1A;&#x5C01;&#x5C06; RPC &#x8C03;&#x7528;&#xFF0C;&#x4EE5; <code>Invocation</code>, <code>Result</code> &#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>Protocol</code>, <code>Invoker</code>, <code>Exporter</code></li>
+<li><strong>protocol &#x8FDC;&#x7A0B;&#x8C03;&#x7528;&#x5C42;</strong>&#xFF1A;&#x5C01;&#x88C5; RPC &#x8C03;&#x7528;&#xFF0C;&#x4EE5; <code>Invocation</code>, <code>Result</code> &#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>Protocol</code>, <code>Invoker</code>, <code>Exporter</code></li>
 <li><strong>exchange &#x4FE1;&#x606F;&#x4EA4;&#x6362;&#x5C42;</strong>&#xFF1A;&#x5C01;&#x88C5;&#x8BF7;&#x6C42;&#x54CD;&#x5E94;&#x6A21;&#x5F0F;&#xFF0C;&#x540C;&#x6B65;&#x8F6C;&#x5F02;&#x6B65;&#xFF0C;&#x4EE5; <code>Request</code>, <code>Response</code> &#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>Exchanger</code>, <code>ExchangeChannel</code>, <code>ExchangeClient</code>, <code>ExchangeServer</code></li>
 <li><strong>transport &#x7F51;&#x7EDC;&#x4F20;&#x8F93;&#x5C42;</strong>&#xFF1A;&#x62BD;&#x8C61; mina &#x548C; netty &#x4E3A;&#x7EDF;&#x4E00;&#x63A5;&#x53E3;&#xFF0C;&#x4EE5; <code>Message</code> &#x4E3A;&#x4E2D;&#x5FC3;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>Channel</code>, <code>Transporter</code>, <code>Client</code>, <code>Server</code>, <code>Codec</code></li>
 <li><strong>serialize &#x6570;&#x636E;&#x5E8F;&#x5217;&#x5316;&#x5C42;</strong>&#xFF1A;&#x53EF;&#x590D;&#x7528;&#x7684;&#x4E00;&#x4E9B;&#x5DE5;&#x5177;&#xFF0C;&#x6269;&#x5C55;&#x63A5;&#x53E3;&#x4E3A; <code>Serialization</code>, <code>ObjectInput</code>, <code>ObjectOutput</code>, <code>ThreadPool</code></li>
@@ -882,7 +882,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"2 框架设计","level":"1.3","depth":1,"next":{"title":"3 扩展点加载","level":"1.4","depth":1,"path":"SPI.md","ref":"./SPI.md","articles":[]},"previous":{"title":"1 源码构建","level":"1.2","depth":1,"path":"build.md","ref":"./build.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"design.md","mtime":"2017-12-26T02:28:05.758Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"2 框架设计","level":"1.3","depth":1,"next":{"title":"3 扩展点加载","level":"1.4","depth":1,"path":"SPI.md","ref":"./SPI.md","articles":[]},"previous":{"title":"1 源码构建","level":"1.2","depth":1,"path":"build.md","ref":"./build.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"design.md","mtime":"2018-03-19T06:46:50.902Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/implementation.html b/books/dubbo-dev-book/implementation.html
index 43b7a988..4ba96446 100644
--- a/books/dubbo-dev-book/implementation.html
+++ b/books/dubbo-dev-book/implementation.html
@@ -900,7 +900,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"4 实现细节","level":"1.5","depth":1,"next":{"title":"5 SPI 扩展实现","level":"1.6","depth":1,"path":"impls/introduction.md","ref":"./impls/introduction.md","articles":[{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]}]},"previous":{"title":"3 扩展点加载","level":"1.4","depth":1,"path":"SPI.md","ref":"./SPI.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"implementation.md","mtime":"2017-12-26T02:28:05.759Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"4 实现细节","level":"1.5","depth":1,"next":{"title":"5 SPI 扩展实现","level":"1.6","depth":1,"path":"impls/introduction.md","ref":"./impls/introduction.md","articles":[{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]}]},"previous":{"title":"3 扩展点加载","level":"1.4","depth":1,"path":"SPI.md","ref":"./SPI.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"implementation.md","mtime":"2018-03-19T06:46:50.902Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/cache.html b/books/dubbo-dev-book/impls/cache.html
index 21a59a2f..42d648cf 100644
--- a/books/dubbo-dev-book/impls/cache.html
+++ b/books/dubbo-dev-book/impls/cache.html
@@ -861,7 +861,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"next":{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"previous":{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cache.md","mtime":"2017-12-26T02:28:05.759Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"next":{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"previous":{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cache.md","mtime":"2018-03-19T06:46:50.903Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/cluster.html b/books/dubbo-dev-book/impls/cluster.html
index 0fdf3b2b..5e055476 100644
--- a/books/dubbo-dev-book/impls/cluster.html
+++ b/books/dubbo-dev-book/impls/cluster.html
@@ -856,7 +856,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"next":{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"previous":{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cluster.md","mtime":"2017-12-26T02:28:05.760Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"next":{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"previous":{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/cluster.md","mtime":"2018-03-19T06:46:50.903Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/compiler.html b/books/dubbo-dev-book/impls/compiler.html
index d00d37da..00d33d48 100644
--- a/books/dubbo-dev-book/impls/compiler.html
+++ b/books/dubbo-dev-book/impls/compiler.html
@@ -838,7 +838,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"next":{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"previous":{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/compiler.md","mtime":"2017-12-26T02:28:05.760Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"next":{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"previous":{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/compiler.md","mtime":"2018-03-19T06:46:50.904Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/container.html b/books/dubbo-dev-book/impls/container.html
index 7120db5b..dba6df64 100644
--- a/books/dubbo-dev-book/impls/container.html
+++ b/books/dubbo-dev-book/impls/container.html
@@ -844,7 +844,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"next":{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"previous":{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/container.md","mtime":"2017-12-26T02:28:05.761Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"next":{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},"previous":{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/container.md","mtime":"2018-03-19T06:46:50.904Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/dispatcher.html b/books/dubbo-dev-book/impls/dispatcher.html
index d2023dc5..457ba14f 100644
--- a/books/dubbo-dev-book/impls/dispatcher.html
+++ b/books/dubbo-dev-book/impls/dispatcher.html
@@ -844,7 +844,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"next":{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"previous":{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/dispatcher.md","mtime":"2017-12-26T02:28:05.761Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"next":{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"previous":{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/dispatcher.md","mtime":"2018-03-19T06:46:50.904Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/exchanger.html b/books/dubbo-dev-book/impls/exchanger.html
index 0eeec543..e714cafd 100644
--- a/books/dubbo-dev-book/impls/exchanger.html
+++ b/books/dubbo-dev-book/impls/exchanger.html
@@ -867,7 +867,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"next":{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"previous":{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exchanger.md","mtime":"2017-12-26T02:28:05.762Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"next":{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"previous":{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exchanger.md","mtime":"2018-03-19T06:46:50.904Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/exporter-listener.html b/books/dubbo-dev-book/impls/exporter-listener.html
index 707979e1..961ef3dd 100644
--- a/books/dubbo-dev-book/impls/exporter-listener.html
+++ b/books/dubbo-dev-book/impls/exporter-listener.html
@@ -845,7 +845,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"next":{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"previous":{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exporter-listener.md","mtime":"2017-12-26T02:28:05.763Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"next":{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"previous":{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/exporter-listener.md","mtime":"2018-03-19T06:46:50.905Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/extension-factory.html b/books/dubbo-dev-book/impls/extension-factory.html
index ebf4000e..d35eea7d 100644
--- a/books/dubbo-dev-book/impls/extension-factory.html
+++ b/books/dubbo-dev-book/impls/extension-factory.html
@@ -839,7 +839,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"next":{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"previous":{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/extension-factory.md","mtime":"2017-12-26T02:28:05.764Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"next":{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},"previous":{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/extension-factory.md","mtime":"2018-03-19T06:46:50.905Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/filter.html b/books/dubbo-dev-book/impls/filter.html
index 1baa32c7..edda8770 100644
--- a/books/dubbo-dev-book/impls/filter.html
+++ b/books/dubbo-dev-book/impls/filter.html
@@ -871,7 +871,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"next":{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"previous":{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/filter.md","mtime":"2017-12-26T02:28:05.764Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"next":{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},"previous":{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/filter.md","mtime":"2018-03-19T06:46:50.905Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/introduction.html b/books/dubbo-dev-book/impls/introduction.html
index 4d4a19b1..27c3b5e2 100644
--- a/books/dubbo-dev-book/impls/introduction.html
+++ b/books/dubbo-dev-book/impls/introduction.html
@@ -802,7 +802,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5 SPI 扩展实现","level":"1.6","depth":1,"next":{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"previous":{"title":"4 实现细节","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/introduction.md","mtime":"2017-12-26T02:28:05.764Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5 SPI 扩展实现","level":"1.6","depth":1,"next":{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},"previous":{"title":"4 实现细节","level":"1.5","depth":1,"path":"implementation.md","ref":"./implementation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/introduction.md","mtime":"2018-03-19T06:46:50.906Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/invoker-listener.html b/books/dubbo-dev-book/impls/invoker-listener.html
index 94545f58..56f0e1c2 100644
--- a/books/dubbo-dev-book/impls/invoker-listener.html
+++ b/books/dubbo-dev-book/impls/invoker-listener.html
@@ -844,7 +844,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"next":{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"previous":{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/invoker-listener.md","mtime":"2017-12-26T02:28:05.765Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"next":{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},"previous":{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/invoker-listener.md","mtime":"2018-03-19T06:46:50.906Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/load-balance.html b/books/dubbo-dev-book/impls/load-balance.html
index 9ade378b..fccdd8f8 100644
--- a/books/dubbo-dev-book/impls/load-balance.html
+++ b/books/dubbo-dev-book/impls/load-balance.html
@@ -845,7 +845,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"next":{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"previous":{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/load-balance.md","mtime":"2017-12-26T02:28:05.765Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"next":{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"previous":{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/load-balance.md","mtime":"2018-03-19T06:46:50.906Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/logger-adapter.html b/books/dubbo-dev-book/impls/logger-adapter.html
index 2b11a8b5..503de1b5 100644
--- a/books/dubbo-dev-book/impls/logger-adapter.html
+++ b/books/dubbo-dev-book/impls/logger-adapter.html
@@ -859,7 +859,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"next":{"title":"6 公共契约","level":"1.7","depth":1,"path":"contract.md","ref":"./contract.md","articles":[]},"previous":{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/logger-adapter.md","mtime":"2017-12-26T02:28:05.765Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"next":{"title":"6 公共契约","level":"1.7","depth":1,"path":"contract.md","ref":"./contract.md","articles":[]},"previous":{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/logger-adapter.md","mtime":"2018-03-19T06:46:50.906Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/merger.html b/books/dubbo-dev-book/impls/merger.html
index 582ff9bf..a73e1b48 100644
--- a/books/dubbo-dev-book/impls/merger.html
+++ b/books/dubbo-dev-book/impls/merger.html
@@ -841,7 +841,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"next":{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"previous":{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/merger.md","mtime":"2017-12-26T02:28:05.766Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"next":{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"previous":{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/merger.md","mtime":"2018-03-19T06:46:50.906Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/monitor.html b/books/dubbo-dev-book/impls/monitor.html
index 99d7c4bc..3d43f6ec 100644
--- a/books/dubbo-dev-book/impls/monitor.html
+++ b/books/dubbo-dev-book/impls/monitor.html
@@ -854,7 +854,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"next":{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"previous":{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/monitor.md","mtime":"2017-12-26T02:28:05.767Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"next":{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"previous":{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/monitor.md","mtime":"2018-03-19T06:46:50.907Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/networker.html b/books/dubbo-dev-book/impls/networker.html
index 94e84438..5f4411db 100644
--- a/books/dubbo-dev-book/impls/networker.html
+++ b/books/dubbo-dev-book/impls/networker.html
@@ -841,7 +841,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"next":{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"previous":{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/networker.md","mtime":"2017-12-26T02:28:05.767Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"next":{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"previous":{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/networker.md","mtime":"2018-03-19T06:46:50.907Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/page.html b/books/dubbo-dev-book/impls/page.html
index 24e83f65..584a169a 100644
--- a/books/dubbo-dev-book/impls/page.html
+++ b/books/dubbo-dev-book/impls/page.html
@@ -843,7 +843,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"next":{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"previous":{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/page.md","mtime":"2017-12-26T02:28:05.767Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"next":{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"previous":{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/page.md","mtime":"2018-03-19T06:46:50.907Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/protocol.html b/books/dubbo-dev-book/impls/protocol.html
index 6e938e02..cf1baeea 100644
--- a/books/dubbo-dev-book/impls/protocol.html
+++ b/books/dubbo-dev-book/impls/protocol.html
@@ -927,7 +927,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"next":{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"previous":{"title":"5 SPI 扩展实现","level":"1.6","depth":1,"path":"impls/introduction.md","ref":"./impls/introduction.md","articles":[{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/protocol.md","mtime":"2017-12-26T02:28:05.768Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"next":{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},"previous":{"title":"5 SPI 扩展实现","level":"1.6","depth":1,"path":"impls/introduction.md","ref":"./impls/introduction.md","articles":[{"title":"5.1 协议扩展","level":"1.6.1","depth":2,"path":"impls/protocol.md","ref":"./impls/protocol.md","articles":[]},{"title":"5.2 调用拦截扩展","level":"1.6.2","depth":2,"path":"impls/filter.md","ref":"./impls/filter.md","articles":[]},{"title":"5.3 引用监听扩展","level":"1.6.3","depth":2,"path":"impls/invoker-listener.md","ref":"./impls/invoker-listener.md","articles":[]},{"title":"5.4 暴露监听扩展","level":"1.6.4","depth":2,"path":"impls/exporter-listener.md","ref":"./impls/exporter-listener.md","articles":[]},{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"path":"impls/router.md","ref":"./impls/router.md","articles":[]},{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"path":"impls/registry.md","ref":"./impls/registry.md","articles":[]},{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"path":"impls/proxy-factory.md","ref":"./impls/proxy-factory.md","articles":[]},{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},{"title":"5.23 页面扩展","level":"1.6.23","depth":2,"path":"impls/page.md","ref":"./impls/page.md","articles":[]},{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"path":"impls/validation.md","ref":"./impls/validation.md","articles":[]},{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/protocol.md","mtime":"2018-03-19T06:46:50.908Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/proxy-factory.html b/books/dubbo-dev-book/impls/proxy-factory.html
index 02ec9737..32a2646f 100644
--- a/books/dubbo-dev-book/impls/proxy-factory.html
+++ b/books/dubbo-dev-book/impls/proxy-factory.html
@@ -847,7 +847,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"next":{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"previous":{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/proxy-factory.md","mtime":"2017-12-26T02:28:05.768Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.12 动态代理扩展","level":"1.6.12","depth":2,"next":{"title":"5.13 编译器扩展","level":"1.6.13","depth":2,"path":"impls/compiler.md","ref":"./impls/compiler.md","articles":[]},"previous":{"title":"5.11 扩展点加载扩展","level":"1.6.11","depth":2,"path":"impls/extension-factory.md","ref":"./impls/extension-factory.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/proxy-factory.md","mtime":"2018-03-19T06:46:50.909Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/registry.html b/books/dubbo-dev-book/impls/registry.html
index 2be97b66..fa85c4bb 100644
--- a/books/dubbo-dev-book/impls/registry.html
+++ b/books/dubbo-dev-book/impls/registry.html
@@ -974,7 +974,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"next":{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"previous":{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/registry.md","mtime":"2017-12-26T02:28:05.769Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.9 注册中心扩展","level":"1.6.9","depth":2,"next":{"title":"5.10 监控中心扩展","level":"1.6.10","depth":2,"path":"impls/monitor.md","ref":"./impls/monitor.md","articles":[]},"previous":{"title":"5.8 合并结果扩展","level":"1.6.8","depth":2,"path":"impls/merger.md","ref":"./impls/merger.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/registry.md","mtime":"2018-03-19T06:46:50.909Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/remoting.html b/books/dubbo-dev-book/impls/remoting.html
index cf887154..8715a418 100644
--- a/books/dubbo-dev-book/impls/remoting.html
+++ b/books/dubbo-dev-book/impls/remoting.html
@@ -900,7 +900,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"next":{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"previous":{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/remoting.md","mtime":"2017-12-26T02:28:05.769Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"next":{"title":"5.18 信息交换扩展","level":"1.6.18","depth":2,"path":"impls/exchanger.md","ref":"./impls/exchanger.md","articles":[]},"previous":{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/remoting.md","mtime":"2018-03-19T06:46:50.909Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/router.html b/books/dubbo-dev-book/impls/router.html
index cb0b6831..a1300cd7 100644
--- a/books/dubbo-dev-book/impls/router.html
+++ b/books/dubbo-dev-book/impls/router.html
@@ -842,7 +842,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"next":{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"previous":{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/router.md","mtime":"2017-12-26T02:28:05.770Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.6 路由扩展","level":"1.6.6","depth":2,"next":{"title":"5.7 负载均衡扩展","level":"1.6.7","depth":2,"path":"impls/load-balance.md","ref":"./impls/load-balance.md","articles":[]},"previous":{"title":"5.5 集群扩展","level":"1.6.5","depth":2,"path":"impls/cluster.md","ref":"./impls/cluster.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/router.md","mtime":"2018-03-19T06:46:50.910Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/serialize.html b/books/dubbo-dev-book/impls/serialize.html
index 608e6ebe..54afdd2b 100644
--- a/books/dubbo-dev-book/impls/serialize.html
+++ b/books/dubbo-dev-book/impls/serialize.html
@@ -856,7 +856,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"next":{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"previous":{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/serialize.md","mtime":"2017-12-26T02:28:05.770Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"next":{"title":"5.17 网络传输扩展","level":"1.6.17","depth":2,"path":"impls/remoting.md","ref":"./impls/remoting.md","articles":[]},"previous":{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"path":"impls/threadpool.md","ref":"./impls/threadpool.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/serialize.md","mtime":"2018-03-19T06:46:50.910Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/status-checker.html b/books/dubbo-dev-book/impls/status-checker.html
index 55ff663c..610790b9 100644
--- a/books/dubbo-dev-book/impls/status-checker.html
+++ b/books/dubbo-dev-book/impls/status-checker.html
@@ -846,7 +846,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"next":{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"previous":{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/status-checker.md","mtime":"2017-12-26T02:28:05.771Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"next":{"title":"5.22 容器扩展","level":"1.6.22","depth":2,"path":"impls/container.md","ref":"./impls/container.md","articles":[]},"previous":{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"path":"impls/telnet-handler.md","ref":"./impls/telnet-handler.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/status-checker.md","mtime":"2018-03-19T06:46:50.910Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/telnet-handler.html b/books/dubbo-dev-book/impls/telnet-handler.html
index 30eec7a3..68010edf 100644
--- a/books/dubbo-dev-book/impls/telnet-handler.html
+++ b/books/dubbo-dev-book/impls/telnet-handler.html
@@ -856,7 +856,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"next":{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"previous":{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/telnet-handler.md","mtime":"2017-12-26T02:28:05.771Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.20 Telnet 命令扩展","level":"1.6.20","depth":2,"next":{"title":"5.21 状态检查扩展","level":"1.6.21","depth":2,"path":"impls/status-checker.md","ref":"./impls/status-checker.md","articles":[]},"previous":{"title":"5.19 组网扩展","level":"1.6.19","depth":2,"path":"impls/networker.md","ref":"./impls/networker.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/telnet-handler.md","mtime":"2018-03-19T06:46:50.911Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/threadpool.html b/books/dubbo-dev-book/impls/threadpool.html
index 36e0de5d..dd39eee8 100644
--- a/books/dubbo-dev-book/impls/threadpool.html
+++ b/books/dubbo-dev-book/impls/threadpool.html
@@ -842,7 +842,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"next":{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"previous":{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/threadpool.md","mtime":"2017-12-26T02:28:05.771Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.15 线程池扩展","level":"1.6.15","depth":2,"next":{"title":"5.16 序列化扩展","level":"1.6.16","depth":2,"path":"impls/serialize.md","ref":"./impls/serialize.md","articles":[]},"previous":{"title":"5.14 消息派发扩展","level":"1.6.14","depth":2,"path":"impls/dispatcher.md","ref":"./impls/dispatcher.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/threadpool.md","mtime":"2018-03-19T06:46:50.911Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/impls/validation.html b/books/dubbo-dev-book/impls/validation.html
index 76f466b3..b4dd6722 100644
--- a/books/dubbo-dev-book/impls/validation.html
+++ b/books/dubbo-dev-book/impls/validation.html
@@ -852,7 +852,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"next":{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]},"previous":{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/validation.md","mtime":"2017-12-26T02:28:05.772Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.25 验证扩展","level":"1.6.25","depth":2,"next":{"title":"5.26 日志适配扩展","level":"1.6.26","depth":2,"path":"impls/logger-adapter.md","ref":"./impls/logger-adapter.md","articles":[]},"previous":{"title":"5.24 缓存扩展","level":"1.6.24","depth":2,"path":"impls/cache.md","ref":"./impls/cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"impls/validation.md","mtime":"2018-03-19T06:46:50.911Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/index.html b/books/dubbo-dev-book/index.html
index ca04e929..99671c6b 100644
--- a/books/dubbo-dev-book/index.html
+++ b/books/dubbo-dev-book/index.html
@@ -795,7 +795,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 源码构建","level":"1.2","depth":1,"path":"build.md","ref":"./build.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2017-12-26T02:28:05.750Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"Introduction","level":"1.1","depth":1,"next":{"title":"1 源码构建","level":"1.2","depth":1,"path":"build.md","ref":"./build.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"README.md","mtime":"2018-03-19T06:46:50.898Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/introduction.html b/books/dubbo-dev-book/introduction.html
new file mode 100644
index 00000000..a337a100
--- /dev/null
+++ b/books/dubbo-dev-book/introduction.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <title>Apache Dubbo (incubating)</title>
+<!-- Begin Jekyll SEO tag v2.3.0 -->
+<title>Apache Dubbo (incubating) | Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.</title>
+<meta property="og:title" content="Apache Dubbo (incubating)" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:site_name" content="Apache Dubbo (incubating)" />
+<script type="application/ld+json">
+{"name":null,"description":"Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.","author":null,"@type":"WebPage","url":"/books/dubbo-dev-book/introduction.html","publisher":null,"image":null,"headline":"Apache Dubbo (incubating)","dateModified":null,"datePublished":null,"sameAs":null,"mainEntityOfPage":null,"@context":"http://schema.org"}</script>
+<!-- End Jekyll SEO tag -->
+
+    <meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework."/>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="theme-color" content="#157878">
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="/assets/css/style.css?v=5e4e78ddaf4ea9e9a1a5bb0ded1eae4ac241ca64">
+      <!--<script>-->
+      <!--var _hmt = _hmt || [];-->
+      <!--(function() {-->
+      <!--var hm = document.createElement("script");-->
+      <!--hm.src = "https://hm.baidu.com/hm.js?5d37fba14b64e6bc8e0be39b4a08a59d";-->
+      <!--var s = document.getElementsByTagName("script")[0]; -->
+      <!--s.parentNode.insertBefore(hm, s);-->
+      <!--})();-->
+      <!--</script>-->
+  </head>
+  <body>
+    <section class="page-header">
+      <h1 class="project-name"><a href="http://www.apache.org"><img src="images//asf-feather.svg" title="Apache Software Foundation" alt="Apache Software Foundation" style="width: 50px;vertical-align: bottom;" /></a>Apache Dubbo (incubating)</h1>
+      <h2 class="project-tagline">Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.</h2>
+      
+        <a href="https://github.com/apache/incubator-dubbo" class="btn">View on GitHub</a>
+      
+      
+    </section>
+
+    <section class="main-content">
+      <p>这里增加《开发指南》的内容</p>
+
+
+      <footer class="site-footer">
+          <span class="site-footer-credits">Copyright © 2018 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</span>
+      </footer>
+    </section>
+
+    
+      <script type="text/javascript">
+        (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-112489517-1', 'auto');
+        ga('send', 'pageview');
+      </script>
+    
+  </body>
+</html>
diff --git a/books/dubbo-dev-book/principals/code-detail.html b/books/dubbo-dev-book/principals/code-detail.html
index 09eee24a..103e18d5 100644
--- a/books/dubbo-dev-book/principals/code-detail.html
+++ b/books/dubbo-dev-book/principals/code-detail.html
@@ -821,7 +821,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"next":{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},"previous":{"title":"8 设计原则","level":"1.9","depth":1,"path":"principals/introduction.md","ref":"./principals/introduction.md","articles":[{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/code-detail.md","mtime":"2017-12-26T02:28:05.773Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"next":{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},"previous":{"title":"8 设计原则","level":"1.9","depth":1,"path":"principals/introduction.md","ref":"./principals/introduction.md","articles":[{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/code-detail.md","mtime":"2018-03-19T06:46:50.912Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/principals/configuration.html b/books/dubbo-dev-book/principals/configuration.html
index c95ec44b..00fe9e1f 100644
--- a/books/dubbo-dev-book/principals/configuration.html
+++ b/books/dubbo-dev-book/principals/configuration.html
@@ -853,7 +853,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8.4 配置设计","level":"1.9.4","depth":2,"next":{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},"previous":{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/configuration.md","mtime":"2017-12-26T02:28:05.773Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8.4 配置设计","level":"1.9.4","depth":2,"next":{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},"previous":{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/configuration.md","mtime":"2018-03-19T06:46:50.913Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/principals/dummy.html b/books/dubbo-dev-book/principals/dummy.html
index 1c2b4868..3bd71051 100644
--- a/books/dubbo-dev-book/principals/dummy.html
+++ b/books/dubbo-dev-book/principals/dummy.html
@@ -978,7 +978,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"next":{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]},"previous":{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/dummy.md","mtime":"2017-12-26T02:28:05.774Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"next":{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]},"previous":{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"path":"principals/robustness.md","ref":"./principals/robustness.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/dummy.md","mtime":"2018-03-19T06:46:50.913Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/principals/expansibility.html b/books/dubbo-dev-book/principals/expansibility.html
index 165421a4..bc1d5efe 100644
--- a/books/dubbo-dev-book/principals/expansibility.html
+++ b/books/dubbo-dev-book/principals/expansibility.html
@@ -811,7 +811,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"next":{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},"previous":{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/expansibility.md","mtime":"2017-12-26T02:28:05.774Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"next":{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},"previous":{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"path":"principals/general-knowledge.md","ref":"./principals/general-knowledge.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/expansibility.md","mtime":"2018-03-19T06:46:50.913Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/principals/extension.html b/books/dubbo-dev-book/principals/extension.html
index e5efabc4..0c259737 100644
--- a/books/dubbo-dev-book/principals/extension.html
+++ b/books/dubbo-dev-book/principals/extension.html
@@ -886,7 +886,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"next":{"title":"9 版本管理","level":"1.10","depth":1,"path":"release.md","ref":"./release.md","articles":[]},"previous":{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/extension.md","mtime":"2017-12-26T02:28:05.774Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"next":{"title":"9 版本管理","level":"1.10","depth":1,"path":"release.md","ref":"./release.md","articles":[]},"previous":{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/extension.md","mtime":"2018-03-19T06:46:50.913Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/principals/general-knowledge.html b/books/dubbo-dev-book/principals/general-knowledge.html
index 3d73789c..5ce3a3a8 100644
--- a/books/dubbo-dev-book/principals/general-knowledge.html
+++ b/books/dubbo-dev-book/principals/general-knowledge.html
@@ -836,7 +836,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"next":{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},"previous":{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/general-knowledge.md","mtime":"2017-12-26T02:28:05.775Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8.2 一些设计上的基本常识","level":"1.9.2","depth":2,"next":{"title":"8.3 谈谈扩充式扩展与增量式扩展","level":"1.9.3","depth":2,"path":"principals/expansibility.md","ref":"./principals/expansibility.md","articles":[]},"previous":{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/general-knowledge.md","mtime":"2018-03-19T06:46:50.914Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/principals/introduction.html b/books/dubbo-dev-book/principals/introduction.html
index a029d4d7..f762cf98 100644
--- a/books/dubbo-dev-book/principals/introduction.html
+++ b/books/dubbo-dev-book/principals/introduction.html
@@ -802,7 +802,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8 设计原则","level":"1.9","depth":1,"next":{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},"previous":{"title":"7 编码约定","level":"1.8","depth":1,"path":"coding.md","ref":"./coding.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/introduction.md","mtime":"2017-12-26T02:28:05.775Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8 设计原则","level":"1.9","depth":1,"next":{"title":"8.1 魔鬼在细节","level":"1.9.1","depth":2,"path":"principals/code-detail.md","ref":"./principals/code-detail.md","articles":[]},"previous":{"title":"7 编码约定","level":"1.8","depth":1,"path":"coding.md","ref":"./coding.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/introduction.md","mtime":"2018-03-19T06:46:50.914Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/principals/robustness.html b/books/dubbo-dev-book/principals/robustness.html
index 0687f9f3..ada78b4d 100644
--- a/books/dubbo-dev-book/principals/robustness.html
+++ b/books/dubbo-dev-book/principals/robustness.html
@@ -849,7 +849,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"next":{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},"previous":{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/robustness.md","mtime":"2017-12-26T02:28:05.776Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"8.5 设计实现的健壮性","level":"1.9.5","depth":2,"next":{"title":"8.6 防痴呆设计","level":"1.9.6","depth":2,"path":"principals/dummy.md","ref":"./principals/dummy.md","articles":[]},"previous":{"title":"8.4 配置设计","level":"1.9.4","depth":2,"path":"principals/configuration.md","ref":"./principals/configuration.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"principals/robustness.md","mtime":"2018-03-19T06:46:50.914Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/release.html b/books/dubbo-dev-book/release.html
index 59d824fb..32a89b98 100644
--- a/books/dubbo-dev-book/release.html
+++ b/books/dubbo-dev-book/release.html
@@ -832,7 +832,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"9 版本管理","level":"1.10","depth":1,"next":{"title":"10 贡献","level":"1.11","depth":1,"path":"contribution.md","ref":"./contribution.md","articles":[]},"previous":{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"release.md","mtime":"2017-12-26T02:28:05.776Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:29:26.390Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"9 版本管理","level":"1.10","depth":1,"next":{"title":"10 贡献","level":"1.11","depth":1,"path":"contribution.md","ref":"./contribution.md","articles":[]},"previous":{"title":"8.7 扩展点重构","level":"1.9.7","depth":2,"path":"principals/extension.md","ref":"./principals/extension.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"release.md","mtime":"2018-03-19T06:46:50.915Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:08.553Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
diff --git a/books/dubbo-dev-book/search_index.json b/books/dubbo-dev-book/search_index.json
index 2aaaa4d3..416a56b9 100644
--- a/books/dubbo-dev-book/search_index.json
+++ b/books/dubbo-dev-book/search_index.json
@@ -1 +1 @@
-{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["dubbo","introduct","开发的人群。主要涵盖了","源码、设计有兴趣的,或者有意愿加入","的框架设计、扩展机制、编码规范、版本管理、构建等话题。","这篇文档的目标读者是对"],"build.html":["${home}/.m2/repository,","1","1.","1.5","1:","2","2.","2.2.1",">","build","c:\\document","classpath","clean","clone","declipse.workspace=/path/to/the/workspace/","dmaven.test.skip","dubbo","eclips","eclipse:configur","eclipse:eclips","export","git","https://github.com/alibaba/dubbo","https://github.com/alibaba/dubbo/tag","id","idea","idea:idea","instal","intellij","jar","java","m2_repo","master","maven","maven_opt","maven_opts=","mvn","path","prefer","settings\\.m2\\repositori","source:jar","unix","window","workspac","xmx1024m","xx:maxpermsize=512m","↩","上浏览源代码","下的路径是","中导入","中配置","也可以直接在","也可以通过以下的","仓库。","仓库。通过","代码签出","以上的版本","作为主干版本的开发,使用分支作为维护版本。可以通过","作为构建工具。","使用","使用以下命令做一次构建","使用以下命令来生成","分支","包","包,方便用来调试","变量指向本地的","可以通过以下的构建命令来跳过单元测试","命令配置:","在","定义","我们使用","或者以上的版本","支持","来查看所有版本的标签。","构建","构建之前需要配置以下的","构建源代码","源代码","源码构建","的","的工程","的源代码","要求","通过以下命令以构建","通过以下的这个命令签出最新的项目源码","首先,需要在"],"design.html":["+","2","api,其它各层均为","api,用户通过","channel,","client","client,","cluster","cluster,","codec","common","config","consum","consumer,","contain","container,","directory,","dubbo","exchang","exchangechannel,","exchangeclient,","exchanger,","exchangeserv","export","filter","grizzli","invoc","invocation,","invok","invoker,","invoker,也就是去掉","invoker,这样其它人只要关注","loadbal","main","messag","microkernel","mina","mina,","monitor","monitor,","monitorfactory,","monitorservic","netti","netty,","objectinput,","objectoutput,","plugin","plugin,dubbo","protocol","protocol,","provid","provider,","proxi","proxy,","proxyfactori","referenceconfig","registri","registry,","registryfactory,","registryservic","remot","request","request,","respons","result","rmi","rmi协议则不需要使用此包。","router,","rpc","run","serial","serialization,","server","server,","service,","serviceconfig,","serviceproxi","skeleton,","spi。","spring","standlon","statist","stub","threadpool","tomcat/jboss","transport","transporter,","ubbo,隐藏","udp","url","util","web","中。","中,protocol","为中心,只有到了暴露给用户使用时,才用","为中心,可以直接初始化配置类,也可以通过","为中心,扩展接口为","为服务容器,用于部署运行服务,没有在层中画出。","为统一接口,以","代表层或模块,蓝色的表示与业务有交互,绿色的表示只对","代表部署逻辑拓扑节点。","以","传输层和","传输,而","伪装成一个","作为配置信息的统一格式,所有扩展点都通过传递","使用d","依赖关系","信息交换层,transport","信息交换层:封装请求响应模式,同步转异步,以","公共逻辑模块:包括","关系说明","内部交互。","内部再划为","划分逻辑拓普节点,保持统一概念。","加载","协议的实现,如果","协议的实现,如果你选择","协议,整个","即可,加上","只负责组装","各层说明","启动,因为服务通常不需要","和","和服务器端","图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,servic","图中只包含","图中小方块","图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。","图中的","图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。","图中背景方块","图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。","图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。","图例说明:","在","在很多场景下都使用","基本设计原则","实现是","实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。","容器去加载服务。","容器模块:是一个","容器的特性,没必要用","容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。","对其它层都不会造成影响,因为只有一个提供者时,是不需要","对外的","将","就可以完成非透明的","层","层为","层只负责单向消息传输,是对","层和","层封装了所有接口的透明化代理,而在其它层都以","层放在","层是在传输层之上封装了","层都放在","展开总设计图右边服务消费方引用服务的蓝色初始化链,时序图如下:","展开总设计图左边服务提供方暴露服务的蓝色初始化链,时序图如下:","展开总设计图的红色调用链,如下:","引用服务时序","或者去掉","所有细节。","拦截点。","携带配置信息。","数据序列化层:可复用的一些工具,扩展接口为","整体上按照分层结构进行分包,与分层的不同点在于:","整体设计","整体都隐含在","是会话域,它持有调用过程中的变量,比如方法名,参数等。","是可以","是外围概念,所以","是实体域,它是","是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用","是服务域,它是","是核心层,也就是只要有","暴露和引用的主功能入口,它负责","暴露服务时序","更多设计原则参见:框架设计原则","服务代理层:服务接口透明代理,生成服务的客户端","框架设计","模块中,为","模块中,以便更大程度复用。","模块中,这两层是","模块分包","模块说明:","模式,microkernel","注册中心层:封装服务地址的注册与发现,以服务","注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。","用","的。","的主过程上","的原因是","的容器,以简单的","的层,remot","的层,不包含","的所有功能点都可被用户自定义扩展所替换。","的抽象,它也可以扩展","的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起","的核心领域模型中:","的核心,在不需要集群也就是只有一个提供者时,可以只使用这两层完成","的生命周期管理。","的目的是将多个","的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。","监控层:rpc","监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。","等","类和通用模型。","网络传输层:抽象","而","自身的功能也是通过扩展点实现的,也就是","解析配置生成配置类","语义。","调用。","调用次数和调用时间监控,以","调用的通讯基础。","调用链","调用,以","调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。","调用,然后在","路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以","转成接口,或将接口实现转成","远程调用层:封将","远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。","远程通讯模块:相当于","都不会用上,remot","配置层:对外配置接口,以","配置模块:是","采用","集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡,","领域模型"],"SPI.html":["\"provider\",","\"transport\"})","\"xxx\")","(servic","(造轮者)","...","...);","//","//...","1.","1,放置扩展点配置文件","2.","2:","3","=","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"server\",","adapt","aop","aop,即","bind()","bind(url","car","carmak","carmaker、wheelmak","carmaker(造车者)、wheelmak","channelhandl","class","classpath","client","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.protocol;","com.alibaba.xxx;","connect(url","dubbo","exportlistener,","extensionload","filter","getname()","handler)","impl","impl.refer();","impl;","implemenet","implement","import","inf/dubbo/com.alibaba.dubbo.rpc.protocol,内容为:","inf/dubbo/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔。","interfac","interface)","invokerlistener,","ioc","jar","jdk","jruby.jar","key","key,即可以代理真正的实现类上,可以动态生成。","key,如果该","makecar()","makecar();","makecar(url","makewheel","makewheel();","makewheel(url","meta","new","packag","protocol","protocol)","protocol;","provid","public","racecar","racecar(wheel,","racecarmak","refer()","remotingexception;","return","rubi","rubyscriptengin","ruby,而不是真正失败的原因。","scriptengine,通过","server","setter","setwheelmaker(wheelmak","spi","statuscheck","telnethandler,","this.wheelmak","throw","transport","url","url)","url);","url,","url.get(\"wheel.type\")","valu","value)传递配置信息。","void","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","wrapper","wrapper类内容:","xxx=com.alibaba.xxx.xxxprotocol","xxxfilter","xxxprotocol","xxxprotocol(protocol","xxxprotocolwrapp","{","}","↩","一些操作","下面是","不存在,导致","不是扩展点的真正实现。它的用途主要是用于从","中","中。新加的","中说明。","中返回的实际上是","也是扩展点则会注入","代理了扩展点。","以扩展","会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。","会全","会执行扩展点的拼装操作。","使用","值,来决定代理到哪个实际扩展点。","加载","加载扩展点时,自动注入依赖的扩展点。加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,extensionload","包内","包内同名的这个文件,然后进行合并","包内放置文本文件:meta","包内,dubbo","包内,不是","即","只对提供方激活,group可选\"provider\"或\"consumer\"","和","因为所依赖的","在","在会自动注入依赖的扩展点。extensionload","在加载扩展点时,如果加载到的扩展点有拷贝构造函数,则判定为扩展点","在所有的扩展点上添加了逻辑,有些类似","在扩展类的","增加了对扩展点","如果扩展点加载失败,连扩展点的名称都拿不到了。比如:jdk","实例可以提取约定","实例的逻辑是固定,指定提取的","实例,直到扩展点方法执行时才决定调用是一个扩展点实现。","实现。adapt","实现先查找","实现是在加载扩展点里动态生成。指定提取的","实现来调用对应实现的真正的","实现类内容","对于","对于集合类扩展点,比如:filter,","对应不起来,当用户执行","对象(包含了key","当上面执行","当配置了xxx参数,并且参数为有效值时激活,比如配了cache=\"lru\",自动激活cachefilter。","或:","扩展点加载","扩展点发现机制加强而来。","扩展点方法调用会有url参数(或是参数有url成员)","扩展点特性","扩展点的","扩展点的代码:","扩展点自动包装","扩展点自动激活","扩展点自动装配","扩展点自适应","扩展点配置","扫描所有","持有了实际的扩展点实现类。","接口方法做一个操作后,再调用extension的方法","接口类如下:","改进了","方法。如提取","方法来判定其成员。即","方法的","方法,adapt","无条件自动激活","时,setwheelmak","时,注入的","本身的","来决定","来决定使用哪个","来源:","标准的","没有值则找","注入其它扩展点。","注入的依赖扩展点是一个","注意:扩展点使用单一实例加载(请确保扩展实现的线程安全性),缓存在","注意:这里的配置文件是放在你自己的","注解在接口方法上提供。","的","的一个实现类:","的以下问题:","的协议为例,在协议的实现","的实现。","的实现中要注入哪个。","的扩展点加载从","的扩展点实现","的扩展点类对应的","的支持,一个扩展点可以直接","示例:","示例:有两个为扩展点","等,可以同时加载多个实现,此时,可以用自动激活来简化配置,如:","类。","类。extensionload","类加载失败,这个失败原因被吃掉了,和","类可以把所有扩展点公共逻辑移至","类可以有多个,也可以根据需要新增。","类同样实现了扩展点接口,但是","类的实例,wrapper","约定:","脚本时,会报不支持","自动包装扩展点的","获取脚本类型的名称,但如果","要注入依赖扩展点时,如何决定要注入依赖扩展点的哪个实现。在这个示例中,即是在多个wheelmak","返回扩展点时,包装在真正的扩展点实现外。即从","这个问题在下面一点","这样依赖的扩展点也可以从url拿到配置信息,所有的扩展点自己定好配置的key后,配置信息从url上从最外层传入。url在配置传递上即是一条总线。","这里带来另一个问题,extensionload","通过","通过扫描扩展点实现类的所有","配置模块中的配置","配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。比如:"],"implementation.html":["\"","\"hello","+","1.","1,serviceconfig","2.","2,serviceconfig","3.","3,referenceconfig","4","4.","4,referenceconfig","5.","5,而该","=","abstractproxyinvok","all,","bean","cach","class","cluster","connect","democlientact","demoservic","demoservice)","demoservice.sayhello(\"world\"","demoservice;","demoserviceimpl","direct,","dispather:","dubbo","dubbo.jar","dubbo://","dubbo://servic","dubbobeandefinitionpars","dubboinvoker、","dubbonamespacehandler。","dubboprotocol","dubboprotocol的","execution,","export","export()","exporterlisten","filter","fixed,","getinvok","hello","hessianrpcinvoker、","host/com.alibaba.dubbo.registry.registryservice?export=url.encode(\"dubbo://servic","host/com.alibaba.dubbo.registry.registryservice?refer=url.encode(\"consumer://consum","host/com.foo.fooservice?version=1.0.0\")。","host/com.foo.fooservice?version=1.0.0\"),","host/com.foo.fooservice?version=1.0.0。","host/com.foo.fooservice?version=1.0.0,然后基于扩展点自适应机制,通过提供者","i);","implement","inf/spring.handl","init","injvminvoker、","invok","invokerlisten","invoker:","invoker:服务提供","jdk","message,","meta","name)","name;","privat","protocol","protocolfilterwrapp","protocollistenerwrapp","proxi","proxyfactori","proxy,用户代码通过这个","public","ref","ref(如:helloworldimpl),然后通过","refer","refer()","referenceconfig","referenceconfig.get()","registry://","registry://registri","registryprotocol","remoteexcept","return","rmi","rmi/dubbo/web","rmiinvoker、","rmiprotocol类的","sayhello(str","servic","serviceconfig","serviceconfig.export()","setdemoservice(demoservic","socket","spring","start()","string","this.demoservic","threadpool:","throw","url","url,先注册到注册中心。","url,如:","void","webserviceinvok","wrapper","xml","{","}","↩","上图是服务提供者暴露服务的主过程:","上图是服务消费的主过程:","上面代码中的","上面这个类会被封装成为一个","下面我们用一个精简的图来说明最重要的两种","中的任何一个","为了更好的解释上面这张图,我们结合服务消费和提供者的代码示例来进行说明:","从注册中心发现引用服务:","传给","侦听服务,并接收客户端发来的各种请求,通讯细节由","关于每种协议如","内的","再重新传给","初始化时,将","初始化过程细节","包括监控在内,所有附加功能,全部通过","协议头约定","协议头识别,就会调用","协议头识别,直接调用","协议扩展点,基于扩展点的","协议的","即:","即:","参数中的提供者","参数中的条件,查询提供者","发生在","只暴露服务端口:","名称空间时,会回调","向注册中心暴露服务:","和","和服务消费","在","在有注册中心,通过注册中心发现提供者地址的情况下","在有注册中心,需要注册提供者地址的情况下","在没有注册中心,直接暴露提供者的情况下","在没有注册中心,直连提供者的情况下","在遇到","基于","基于扩展点自适应机制,所有的","基于扩展点自适应机制,通过","基于扩展点自适应机制,通过提供者","处理服务暴露的关键就在","实例(如上图中的红色部分),这是服务消费的关键。接下来把","实例。这样当网络通讯层收到一个请求后,会找到对应的","实例的细节和上一章节所描述的类似。","实例,从而真正调用了服务提供者的代码。dubbo","实例,到这一步就完成具体服务到","实例,并新生成一个","实例,并调用它所对应的","实现了真正的远程服务调用。","实现细节","对象。","对象转换","将多个提供者引用,通过","就是上图中服务消费端的","属性转成","底层来实现,这就省了不少工作量。","引用服务","或","或者","所有","扩展点自适应机制,根据","扩展点进行暴露:","扩展点都会自动套上","扩展点,伪装成单个提供者引用返回。","拦截实现。","拦截服务","方法使用","方法生成","方法调用","方法,基于","方法,它主要是打开","方法,它通过","方法,将","方法,得到提供者引用。","方法,打开服务端口。","方法,返回提供者引用。","是","暴露服务","服务提供者代码:","服务提供者暴露一个服务的详细过程","服务消费者代码:","服务消费者消费一个服务的详细过程","服务,通讯细节这一块由","来实现","标签解析为","格式,所有","渗透在整个实现代码里,对于刚开始接触","满眼都是","然后","然后将","生成一个","由于","的","的人,确实容易给搞混了。","的协议头,进行不同协议的服务暴露或引用。","的参数。","的实现","的标签,都统一用","的格式为:","的格式为:","的格式为:dubbo://servic","的转化。接下来就是","的过程。","的过程,上图中的红色部分。下面我们以","直连引用服务:","等它们在调用","类。","类拿到对外提供服务的实际类","类的","类,但上面两种是最重要的。","类,将所有","线程派发模型","组装成链,在链的最后一节调用真实的引用。","组装集合,在暴露和引用前后,进行回调。","自己实现。","解析出的","解析服务","调用其对应的","转为","转换为客户端需要的接口(如:helloworld)。","转换到","这两种典型协议的实现来进行说明:","进行解析,基于一对一属性映射,将","远程调用细节","远程通讯细节","配置,spring","里还有一些其他的","领域模型中非常重要的一个概念,很多设计思路都是向它靠拢。这就使得","首先"],"impls/introduction.html":["5","contributor","spi","扩展功能插件。","扩展实现","扩展接口仅用于系统集成,或"],"impls/protocol.html":["(实现exporter接口)","(实现invoker接口)","(实现protocol接口)","(纯文本文件,内容为:xxx=com.xxx.xxxprotocol)","*","*/","...","/**","//","1.","2.","3.","5.1",">","@param","@return","@throw","abstract","abstractexport","abstractinvok","class","com","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.xxx;","doinvoke(invoc","dubbo","export","export()","export()传入的invoker由框架实现并传入,协议不需要关心。","export()必须是幂等的,也就是暴露同一个url的invoker两次,和暴露一次没有区别。","export(invok","extend","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","interfac","invocation)","invok","invoke()","invoker)","java","main","maven项目结构:","meta","new","object","packag","protect","protocol","public","refer()","refer()返回的invoker由协议实现,协议通常需要在此invoker中发送远程请求。","refer(class","remotingexception{","resourc","return","rpc","rpcexcept","rpcexception;","src","super(invoker);","super(type,","super.unexport();","tcp","throw","throwabl","type","type,","unexport()","url","url)","url);","void","xxx","xxx=com.xxx.xxxprotocol","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxprotocol","xxxprotocol.java","xxxprotocol.java:","{","|","}","中发送远程请求,export()","为中心,由外层将","传入的","其中,refer()","协议不一定要是","协议不关心业务接口的透明代理,以","协议在接收请求时,应记录请求来源方地址信息:rpccontext.getcontext().setremoteaddress();","协议扩展","协议扩展,封装远程调用细节。","契约:","对象的","已知扩展","引用远程服务:","当url中有设置check=false时,连接失败不能抛出异常,需内部自动恢复。","当暴露服务出错时抛出,比如端口已占用","当用户调用","当用户调用refer()所返回的invoker对象的invoke()方法时,协议需相应执行同url远端export()传入的invoker对象的invoke()方法。","当连接服务提供方失败时抛出","所返回的","扩展接口","扩展示例","扩展说明","扩展配置","方法。","方法时,协议需相应执行同","暴露服务的引用,用于取消暴露","暴露远程服务:","服务的执行体","服务的本地代理","服务的类型","没有配置prototol属性时,使用此配置","注意:","由协议实现,协议通常需要在此","由框架实现并传入,协议不需要关心。","网络通讯,比如通过共享文件,ipc","转换为业务接口。","返回的","进程间通讯等。","远程服务的url地址","远端"],"impls/filter.html":["(实现filter接口)","(纯文本文件,内容为:xxx=com.xxx.xxxfilter)","...","//","5.2","=","befor","class","com","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","default\",剔除添加所有缺省扩展点。","default,表示缺省扩展点插入的位置。比如:filter=\"xxx,default,yyy\",表示","dubbo","filter","filter,而不是覆盖。比如:","foo1\",剔除添加缺省扩展点","foo1。比如:filter=\"","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.filter:","invoc","invocation)","invoke(invok","invoker,","invoker.invoke(invocation);","java","main","maven","meta","packag","provid","public","resourc","result","result;","return","rpcexcept","servic","src","throw","xxx","xxx,yyy,aaa,bbb","xxx=com.xxx.xxxfilt","xxxfilter","xxxfilter.java","xxxfilter.java:","{","|","}","之前,yyi","之后。","同时配置的","和","在缺省","均会生效。如果要覆盖,需配置:","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","时,累加所有","服务提供方和服务消费方调用过程拦截,dubbo","本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。","特殊值","特殊符号","用户自定义","约定:","调用拦截扩展","项目结构:","默认在内置",",则",",表示剔除。比如:filter=\""],"impls/invoker-listener.html":["(实现invokerlistener接口)","(纯文本文件,内容为:xxx=com.xxx.xxxinvokerlistener)","...","//","5.3","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","destroyed(invok","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","invoker)","invokerlisten","java","main","maven","meta","packag","public","referred(invok","resourc","rpcexcept","src","throw","void","xxx","xxx=com.xxx.xxxinvokerlisten","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","{","|","}","已知扩展","引用监听扩展","当有服务引用时,触发该事件。","扩展接口","扩展示例","扩展说明","扩展配置","项目结构:"],"impls/exporter-listener.html":["(实现exporterlistener接口)","(纯文本文件,内容为:xxx=com.xxx.xxxexporterlistener)","...","//","5.4","class","com","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","exported(export","exporter)","exporterlisten","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","java","main","maven","meta","packag","public","resourc","rpcexcept","src","throw","unexported(export","void","xxx","xxx=com.xxx.xxxexporterlisten","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","{","|","}","已知扩展","当有服务暴露时,触发该事件。","扩展接口","扩展示例","扩展说明","扩展配置","暴露监听扩展","项目结构:"],"impls/cluster.html":["(实现cluster接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcluster)","...","//","5.5",">","abstractclusterinvoker(directory)","class","cluster","com","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","directory)","doinvoke(invoc","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","invocation,","invok","invokers,","java","list>","loadbal","loadbalance)","main","maven","merge(directori","meta","new","packag","public","resourc","result","return","rpcexcept","src","throw","xxx","xxx=com.xxx.xxxclust","xxxcluster","xxxcluster.java","xxxcluster.java:","{","|","}","};","已知扩展","当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。","扩展接口","扩展示例","扩展说明","扩展配置","没有配置cluster时,使用此配置","集群扩展","项目结构:"],"impls/router.html":["(实现loadbalance接口)","(纯文本文件,内容为:xxx=com.xxx.xxxrouterfactory)","...","//","5.6","class","com","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","invoc","invocation)","invokers,","java","list>","main","maven","meta","packag","public","resourc","routerfactori","rpcexcept","select(list>","src","throw","xxx","xxx=com.xxx.xxxrouterfactori","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","{","|","}","从多个服务提者方中选择一个进行调用。","已知扩展","扩展接口","扩展示例","扩展说明","路由扩展","项目结构:"],"impls/load-balance.html":["(实现loadbalance接口)","(纯文本文件,内容为:xxx=com.xxx.xxxloadbalance)","...","//","5.7",">","class","com","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","invoc","invocation)","invok","invokers,","java","loadbal","main","maven","meta","packag","public","resourc","rpcexcept","select(list>","src","throw","xxx","xxx=com.xxx.xxxloadbal","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","{","|","}","从多个服务提者方中选择一个进行调用","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置loadbalance时,使用此配置","负载均衡扩展","项目结构:"],"impls/merger.html":["(实现merger接口)","(纯文本文件,内容为:xxx=com.xxx.xxxmerger)","...","//","5.8","class","com","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.xxx;","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","java","main","maven","merge(t...","merger","meta","packag","public","resourc","results)","src","t","xxx","xxx=com.xxx.xxxmerg","xxxmerger","xxxmerger.java","xxxmerger.java:","{","|","}","合并结果扩展","合并返回结果,用于分组聚合。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","项目结构:"],"impls/registry.html":["(实现registryfactory接口)","(实现registry接口)","(纯文本文件,内容为:xxx=com.xxx.xxxregistryfactory)","*","*/","...","/**","//","1.","2.","3.","4.","5.","5.9","6.","7.",">","@param","@return","@see","class","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}的参数。","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}的返回值。","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.xxx;","consumers,","dubbo","extend","getregistry(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","interfac","java","list","listen","listener)","listener);","lookup(url","main","maven","meta","new","notify(list","notifylisten","notifylistener.java:","overrides,允许只通知其中一种类型,但该类型的数据必须是全量的,不是增量的。","packag","public","register(url","registri","registryfactori","registryfactory.java:","registryservic","registryservice.java:","resourc","return","routes,","src","subscribe(url","unregister(url","unsubscribe(url","url","url)","url);","url,","urls);","void","xxx","xxx=com.xxx.xxxregistryfactori","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","{","|","}","中途变更时,允许不同类型的数据分开通知,比如:providers,","允许uri相同但参数不同的url并存,不能覆盖。","允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.barservice&version=1.0.0","取消注册服务.","取消注册需处理契约:","取消订阅服务.","取消订阅需处理契约:","变更事件监听器,不允许为空","如果一种类型的数据为空,需通知一个empty协议并带category参数的标识性url数据。","如果是dynamic=false的持久存储数据,找不到注册数据,则抛illegalstateexception,否则忽略。","如果没有订阅,直接忽略。","已注册信息列表,可能为空,含义同{@link","已注册信息列表,总不为空,含义同{@link","已知扩展","并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*","当url设置了category=overrides时,表示分类存储,缺省类别为providers,可按分类部分通知数据。","当url设置了category=overrides,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。","当url设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。","当url设置了check=false时,订阅失败后不报错,在后台定时重试。","当url设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。","当收到服务变更通知时触发。","当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。","当注册中心重启,网络抖动,需自动恢复订阅请求。","当设置check=false时表示不检查连接,否则在连接不上时抛出异常。","必须阻塞订阅过程,等第一次通知完后再返回。","总是以服务接口和数据类型为维度全量通知,即不会通知一个服务的同类型的部分数据,用户不需要对比上一次通知结果。","扩展契约","扩展接口","扩展示例","扩展说明","扩展配置","按全url匹配取消注册。","按全url匹配取消订阅。","支持backup=10.20.153.10备选注册中心集群地址。","支持file=registry.cache本地磁盘文件缓存。","支持session=60000会话超时或过期设置。","支持timeout=1000请求超时设置。","支持url上的username:password权限认证。","查询条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","没有配置registry属性时,使用此配置","注册中心地址,不允许为空","注册中心引用,总不返回空","注册中心扩展","注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","注册服务.","注册需处理契约:","订阅时的第一次通知,必须是一个服务的所有类型数据的全量通知。","订阅服务.","订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","订阅需处理契约:","负责服务的注册与发现。","连接注册中心.","连接注册中心需处理契约:","通知者(即注册中心实现)需保证通知的顺序,比如:单线程推送,队列串行化,带版本对比。","通知需处理契约:","项目结构:"],"impls/monitor.html":["(实现monitorfactory接口)","(实现monitor接口)","(纯文本文件,内容为:xxx=com.xxx.xxxmonitorfactory)","...","//","5.10","class","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.xxx;","count(url","dubbo","getmonitor(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","java","main","maven","meta","monitor","monitorfactori","new","packag","public","resourc","return","src","statistics)","url)","void","xxx","xxx=com.xxx.xxxmonitorfactori","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","监控中心扩展","负责服务调用次和调用时间的监控。","项目结构:"],"impls/extension-factory.html":["(实现extensionfactory接口)","(纯文本文件,内容为:xxx=com.xxx.xxxextensionfactory)","...","//","5.11","class","com","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.xxx;","dubbo","extensionfactori","getextension(class","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","java","main","maven","meta","name)","object","packag","public","resourc","src","string","type,","xxx","xxx=com.xxx.xxxextensionfactori","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","{","|","}","已知扩展","扩展接口","扩展点加载扩展","扩展点本身的加载容器,可从不同容器加载扩展点。","扩展示例","扩展说明","扩展配置","项目结构:"],"impls/proxy-factory.html":["(实现proxyfactory接口)","(纯文本文件,内容为:xxx=com.xxx.xxxproxyfactory)","...","//","5.12",">","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","getinvoker(t","getproxy(invok","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","invok","invoker)","java","main","maven","meta","packag","proxy,","proxyfactori","public","resourc","rpcexcept","src","t","throw","type,","url","url)","xxx","xxx=com.xxx.xxxproxyfactori","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","{","|","}","动态代理扩展","将","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","接口转换成业务接口。","没有配置proxy属性时,使用此配置","项目结构:"],"impls/compiler.html":["(实现compiler接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcompiler)","...","//","5.13","class","com","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.xxx;","compil","dubbo","getextension(class","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","java","main","maven","meta","name)","object","packag","public","resourc","src","string","type,","xxx","xxx=com.xxx.xxxcompil","xxxcompil","xxxcompiler.java","xxxcompiler.java:","{","|","}","代码编译器,用于动态生成字节码,加速调用。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","编译器扩展","自动加载","项目结构:"],"impls/dispatcher.html":["(实现dispatcher接口)","(纯文本文件,内容为:xxx=com.xxx.xxxdispatcher)","...","//","5.14",">","class","com","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.xxx;","dispatch","dubbo","group","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","java","lookup(url","main","maven","meta","packag","public","resourc","src","url)","xxx","xxx=com.xxx.xxxdispatch","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置dispatcher属性时,使用此配置","消息派发扩展","通道信息派发器,用于指定线程池模型。","项目结构:"],"impls/threadpool.html":["(实现threadpool接口)","(纯文本文件,内容为:xxx=com.xxx.xxxthreadpool)","...","//","5.15",">","class","com","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.xxx;","dubbo","executor","getexecutor()","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","java","java.util.concurrent.executor;","main","maven","meta","packag","public","resourc","src","threadpool","xxx","xxx=com.xxx.xxxthreadpool","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","服务提供方线程程实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。","没有配置threadpool时,使用此配置","线程池扩展","项目结构:"],"impls/serialize.html":["(实现objectinput接口)","(实现objectoutput接口)","(实现serialization接口)","(纯文本文件,内容为:xxx=com.xxx.xxxserialization)","5.16",">","class","com","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.xxx;","deserialize(paramet","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","input)","inputstream","ioexcept","java","main","maven","meta","new","objectinput","objectoutput","output)","outputstream","packag","parameters,","public","resourc","return","serial","serialize(paramet","src","throw","xxx","xxx=com.xxx.xxxseri","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxserial","xxxserialization.java","xxxserialization.java:","{","|","}","将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。","已知扩展","序列化扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置serialization时,使用此配置","项目结构:"],"impls/remoting.html":["(实现client接口)","(实现server接口)","(实现transporter接口)","(纯文本文件,内容为:xxx=com.xxx.xxxtransporter)","...","//","5.17",">","abstractcli","abstractserv","bind(url","channel","channelhandl","class","client","collect","com","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.xxx;","connect(url","doclose()","doconnect()","doopen()","dubbo","extend","getchannel()","getchannel(inetsocketaddress","getchannels()","handler)","handler);","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","java","main","maven","meta","new","packag","protect","public","remoteaddress)","remotingexcept","remotingexception{","resourc","return","server","src","super(url,","throw","throwabl","transport","url,","void","xxx","xxx=com.xxx.xxxtransport","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置transporter/server/client属性时,使用此配置","网络传输扩展","远程通讯的服务器及客户端传输实现。","项目结构:"],"impls/exchanger.html":["(实现exchangeclient接口)","(实现exchanger接口)","(实现exchangeserver接口)","(纯文本文件,内容为:xxx=com.xxx.xxxexchanger)","...","//","5.18",">","bind(url","class","com","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.xxx;","connect(url","dubbo","exchang","exchangecli","exchangehandl","exchangeserv","handler)","handler);","impel","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","java","main","maven","meta","new","packag","public","remotingexcept","request","resourc","respons","return","src","throw","url,","xxx","xxx=com.xxx.xxxexchang","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","{","|","}","信息交换扩展","信息交换语义。","基于传输层之上,实现","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置exchanger属性时,使用此配置","项目结构:"],"impls/networker.html":["(实现networker接口)","(纯文本文件,内容为:xxx=com.xxx.xxxnetworker)","...","//","5.19",">","class","com","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.xxx;","dubbo","group","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","java","lookup(url","main","maven","meta","network","packag","public","resourc","src","url)","xxx","xxx=com.xxx.xxxnetwork","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","{","|","}","对等网络节点组网器。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置networker属性时,使用此配置","组网扩展","项目结构:"],"impls/telnet-handler.html":["(实现telnethandler接口)","(纯文本文件,内容为:xxx=com.xxx.xxxtelnethandler)","...","//","127.0.0.1","20880","5.20",">","@help(parameter=\"...\",","arg","channel,","class","com","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.xxx;","detail=\"...\")","dubbo","dubbo>","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","java","main","maven","message)","meta","packag","public","remotingexcept","resourc","src","string","summary=\"...\",","telnet","telnet(channel","telnethandl","throw","xxx","xxx=com.xxx.xxxtelnethandl","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","{","|","}","命令扩展","已知扩展","所有服务器均支持","扩展接口","扩展示例","扩展说明","扩展配置","没有配置telnet属性时,使用此配置","用法","访问,用于人工干预。","项目结构:"],"impls/status-checker.html":["(实现statuschecker接口)","(纯文本文件,内容为:xxx=com.xxx.xxxstatuschecker)","...","//","5.21",">","check()","class","com","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.xxx;","dubbo","host","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","java","main","maven","meta","packag","public","resourc","src","statu","statuscheck","telnet","xxx","xxx=com.xxx.xxxstatuscheck","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","{","|","}","命令和","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","检查服务依赖各种资源的状态,此状态检查可同时用于","没有配置status属性时,使用此配置","状态检查扩展","的","页面。","项目结构:"],"impls/container.html":["(实现container接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcontainer)","...","//","5.22","class","com","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.xxx;","contain","dubbo","implement","inf","inf/dubbo/com.alibaba.dubbo.container.container:","java","jetti","log4j","main","maven","meta","packag","public","resourc","spring","src","start()","statu","stop()","xxx","xxx=com.xxx.xxxcontain","xxxcontain","xxxcontainer.java","xxxcontainer.java:","{","|","}","容器扩展","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","服务容器扩展,用于自定义加载内容。","项目结构:"],"impls/page.html":["(实现pagehandler接口)","(纯文本文件,内容为:xxx=com.xxx.xxxpagehandler)","...","//","5.23",">","class","com","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.xxx;","dubbo","group","implement","import","inf","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","java","lookup(url","main","maven","meta","packag","pagehandl","public","resourc","src","url)","xxx","xxx=com.xxx.xxxpagehandl","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","{","|","}","对等网络节点组网器。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置page属性时,使用此配置","页面扩展","项目结构:"],"impls/cache.html":["(实现statuschecker接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcachefactory)","...","//","5.24",">","cach","cache(url","cachefactori","class","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.xxx;","dubbo","get(object","getcache(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","java","key)","key,","key,缓存返回结果。","main","maven","meta","name)","name);","new","object","packag","public","put(object","resourc","return","src","string","url,","value)","void","xxx","xxx=com.xxx.xxxcachefactori","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置cache属性时,使用此配置","用请求参数作为","缓存扩展","项目结构:"],"impls/validation.html":["(实现validation接口)","(纯文本文件,内容为:xxx=com.xxx.xxxvalidation)","...","//","5.25",">","class","com","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.xxx;","dubbo","except","getvalidator(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.validation.validation:","invocation)","java","main","maven","meta","object","packag","public","resourc","src","throw","url)","valid","validate(invoc","void","xxx","xxx=com.xxx.xxxvalid","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","{","|","}","参数验证扩展点。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置validation属性时,使用此配置","项目结构:","验证扩展"],"impls/logger-adapter.html":["(实现loggeradapter接口)","(纯文本文件,内容为:xxx=com.xxx.xxxloggeradapter)","...","//","5.26","class","com","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.xxx;","ddubbo:application.logger=xxx","dubbo","getlogger(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","info(str","java","logger","loggeradapt","main","maven","meta","msg)","packag","public","resourc","src","url)","void","xxx","xxx=com.xxx.xxxloggeradapt","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","{","|","}","已知扩展","或者:","扩展接口","扩展示例","扩展说明","扩展配置","日志输出适配扩展点。","日志适配扩展","项目结构:"],"contract.html":["6","dubbo","error","info","url","warn","作为上下文信息贯穿整个扩展点设计体系。","公共契约","公共契约,希望所有扩展点遵守。","参数,url","如果不可恢复或需要报警,打印","如果可恢复异常,或瞬时的状态不一致,打印","所有扩展点参数都包含","日志","日志。","正常运行时的中间状态提示,打印","这里记录的是","采用标准格式:protocol://username:password@host:port/path?key=value&key=valu"],"coding.html":["\"号分隔","1.","1。","2.","2。","3.","3。","7","abstractxxx。","aop","code","comment","convent","dbunit。","doc","dubbo","easymock,集成测试用","error","errorcod","extensionload","failsaf","hessian","info","invok","ioc","isavail","java","javadoc","junit","languag","logutil","map","program","rmi,","rpcexcept","rpcexception。","spi","spring","support","teardown","testng,数据库测试用","tool","try...fin","url","url参数全部用小写,多个单词用\".\"号分隔","warn","write","xxxwrapper,基类都命名为","↩","不能有子类型,所有类型信息用","代码风格","传参,不要自定义","保持单元测试用例的运行速度,不要将性能和大的集成用例放在单元测试中。","保持单元测试的每个用例都用","减少","单元和集成测试","单元测试统一用","即可完成桥接,它们可以用公共基类实现此逻辑。","只负载加载扩展点,包括","和","基于复用度分包,总是一起使用的放在同一包下,将接口和基类分成独立模块,大的实现也使用独立模块。","基类也是","子包下,不同实现用放在以扩展点名字命名的子包下。","完成,extensionload","实现扩展点的通用行为,而不要用基类,比如负载均衡之前的","对于容错行为的测试,比如","对外的唯一异常类型,所有内部异常,如果要抛出给用户,必须转为","对多种相似类型的抽象,用基类实现,比如","尽可能携带完整的上下文信息,比如出错原因,出错的机器地址,调用对方的地址,连的注册中心地址,使用","尽可能用","尽量保持子包依赖父包,而不要反向。","尽量减少","尽量将直接原因写在最前面,所有上下文信息,在原因后用键值对显示。","尽量采用","嵌套,保持","建议应用方在监控中心配置","异常和日志","循环等待结果的测试用例,对定时器和网络的测试,用以将定时器中的逻辑抽为方法测试。","或","或其它上下文格式,配置信息也转成","所有接口都放在模块的根包下,基类放在","打印","扩展。","扩展点之间的组合将关系由","扩展点基类与","抛出异常的地方不用打印日志,由最终处理异常者决定打印日志的级别,吃掉异常必需打印日志。","断言日志输出。","日志实时报警,warn","日志每周汇总发送通知。","日志表示可以自动恢复,打印","日志表示需要报警,打印","是","标识,以便保持兼容。","格式使用。","检查,它是独立于负载均衡之外的,不需要检查的是url参数关闭。","模块与分包","注入扩展点之间的依赖,不要直接依赖","的一部分,每个扩展点都应该有方便使用的基类支持。","的工厂方法。","的测试,统一用","的源代码和","的版本等。","的简洁性。","等第三方协议都已生成了接口代理,只需将将接口代理转成","类都命名为","约定","编码约定","表示正常信息或完全不影响运行。","遵循以下的规范:","配置和","配置对象属性首字母小写,多个单词用驼峰命名","配置属性全部用小写,多个单词用\"","释放资源。"],"principals/introduction.html":["8","javaey","上发表的系列文章。","本章节的设计原则摘录自梁飞在","设计原则"],"principals/code-detail.html":["0","100","8.1","bug,不小心改到了这里,直接引爆故障。对于这个例子,一个原则就是永远不要区分","bug,比如:获取程序的版本号,会通过扫描","catch","catch),而如果它抛出异常会导致主流程异常,这是我们不希望看到的。但这里要控制个度,不要随意","catch,更不要无声无息的吃掉异常。","class),就优先将它设计成不变类。不变类有天然的并发共享优势,减少同步或复制,而且可以有效帮忙分析线程安全的范围。就算是可变类,对于从构造函数传入的引用,在类中持有时,最好将字段","dubbo","empti","final","final,以免被中途误修改引用。不要以为这个字段是私有的,这个类的代码都是我自己写的,不会出现对这个字段的重新赋值。要考虑的一个因素是,这个代码可能被其他人修改,他不知道你的这个弱约定,fin","getversion()","http://javatar.iteye.com/blog/1056664","jar","junit","manifest","map,可以认为是可靠的,而写入数据库等,可以认为是不可靠的。开发人员必须在写每一行代码时,都注意它的可靠性与否,在代码中尽量划分开,并对失败做异常处理,并为容错,自我保护,自动恢复或切换等补偿逻辑提供清晰的切入点,保证后续增加的代码不至于放错位置,而导致原先的容错处理陷入混乱。","mock","null","tri","中加上一个全函数的","保证线程安全性和可见性","值。","分布式服务框架后续如果维护人员增多或变更,会出现质量的下降,","分离可靠操作和不可靠操作","前面不停的提到代码被其他人修改,这也开发人员要随时紧记的。这个其他人包括未来的自己,你要总想着这个代码可能会有人去改它。我应该给修改的人一点什么提示,让他知道我现在的设计意图,而不要在程序里面加潜规则,或埋一些容易忽视的雷,比如:你用","包名称抓取版本号,这个逻辑是辅助性的,但代码却不少,初步测试也没啥问题,但应该在整个","可能存在未知特定场景异常,或被其他的开发人员误修改逻辑(但一般人员不会去掉","和","多个测试用例不通过。时间一紧,谁有这个闲功夫去改这么多形态各异的测试用例?久而久之,这个测试代码就已经不能真实反应代码现在的状况,很多时候会被迫绕过。最好的情况是,修改一行代码,有且只有一行测试代码不通过。如果修改了代码而测试用例还能通过,那也不行,表示测试没有覆盖到。另外,可","大家经常说,魔鬼在细节中,确实如此。","如果一个类可以成为不变类(immut","对于框架的开发人员,对线程安全性和可见性的深入理解是最基本的要求。需要开发人员,在写每一行代码时都应在潜意识中确保其正确性。因为这种代码,在小并发下做功能测试时,会显得很正常。但在高并发下就会出现莫明其妙的问题,而且场景很难重现,极难排查。","就是一个不变契约。","尽早失败也应该成为潜意识,在有传入参数和状态变化时,均在入口处全部断言。一个不合法的值和状态,在第一时间就应报错,而不是等到要用时才报错。因为等到要用时,可能前面已经修改其它相关状态,而在程序中很少有人去处理回滚逻辑。这样报错后,其实内部状态可能已经混乱,极易在一个隐蔽分支上引发程序不可恢复。","尽早失败和前置断言","异常防御,但不忽略异常","引用和","性是隔离的基础,把间接依赖的逻辑屏蔽掉。可","性的一个最大的杀手就是静态方法,尽量少用。","我在想,有没有什么是需要大家共同遵守的,根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节。可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记。在每一行代码中都考虑这些因素,是需要很大耐心的,","打印错误日志,并返回基本版本,因为","提高代码的可测性","最近一直担心","的容易程度,和测试的隔离性。至于测试的自动性,可重复性,非偶然性,无序性,完备性(全覆盖),轻量性(可快速执行),一般开发人员,加上","等于","等工具的辅助基本都能做到,也能理解它的好处,只是工作量问题。这里要特别强调的是测试用例的单一性(只测目标类本身)和隔离性(不传染失败)。现在的测试代码,过于强调完备性,大量重复交叉测试,看起来没啥坏处,但测试代码越多,维护代价越高。经常出现的问题是,修改一行代码或加一个判断条件,引起","缩小可变域和尽量","表示不可用,size","表示黑名单,这就是一个雷,下一个修改者,包括你自己,都不会记得有这样的约定,可能后面为了改某个其它","这是我最不喜欢看到的异常,尤其在核心框架中,我更愿看到信息详细的参数不合法异常。这也是一个健状的程序开发人员,在写每一行代码都应在潜意识中防止的异常。基本上要能确保一次写完的代码,在不测试的情况,都不会出现这两个异常才算合格。","这里的可测性主要指","这里的可靠是狭义的指是否会抛出异常或引起状态不一致,比如,写入一个线程安全的","这里讲的异常防御,指的是对非必须途径上的代码进行最大限度的容忍,包括程序上的","防止空指针和下标越界","降低修改时的误解性,不埋雷","魔鬼在细节"],"principals/general-knowledge.html":["(applic","(servic","8.2","action","action,dubbo","action,里面有个","api","applicationcontext,dubbo","beanfactory,maven","bean,strut","callback","classpath","coc","cover","deleteuser()。","deleteuser(id),删除用户并返回被删除的用户,考虑改为","execute()","execute(),那拦截器接口通常为","execute(execution),原理一样。当然,实现方式可以任意,上面只是举例。","getuser()","http://javatar.iteye.com/blog/706098","interface)","invoc","invoke()","invoke(),那拦截器接口通常为","invoke(invocation),invoc","json","jsonact","jsonaction,这就是","jsonrender","n","newinstance()","onchanged()。比如远程调用框架,当网络断开或连上应该发出一个事件,当出现错误也可以考虑发出一个事件,这样外围应用就有可能观察到框架内部的变化,做相应适应。","orm","osgi,","plexus。通常核心是不应该带有功能性的,而是一个生命周期和集成容器,这样各功能可以通过相同的方式交互及扩展,并且任何功能都可以被替换。如果做不到微核,至少要平等对待第三方,即原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到。原作者要把自己也当作扩展者,这样才能保证框架的可持续性及由内向外的稳定性。","program","provid","queue","render","servicemanag","service,napoli","set","spi","spring","sql","templat","updat","veloc","velocityact","velocityaction,要用","velocityrender","void","web","一些设计上的基本常识","不要控制外部对象的生命周期","与","主过程为","也代表拦截器行为本身,这样上一拦截器的","什么是会话?就是一次交互过程。会话中重要的概念是上下文,什么是上下文?比如我们说:“老地方见”,这里的“老地方”就是上下文信息。为什么说“老地方”对方会知道,因为我们前面定义了“老地方”的具体内容。所以说,上下文通常持有交互过程中的状态变量等。会话对象通常较轻,每次请求都重新创建实例,请求结束后销毁。简而言之:把元信息交由实体域持有,把一次请求中的临时状态由会话域持有,由服务域贯穿整个过程。","任何框架或组件,总会有核心领域模型,比如:spring","住所有需求,允许外置行为,是框架的基本扩展方式。这样,如果有人想在远程调用前,验证下令牌,验证下黑白名单,统计下日志;如果有人想在","使用接口和","做为扩展方式,要用","其实是包装的下一拦截器的过程,直到最后一个拦截器的","分离","创建一个实例,这样框架就控制了","区分命令与查询,明确前置条件与后置条件","参见:谈谈扩充式扩展与增量式扩展","另外,尽可能做一个标准约定,如果用户按某种约定做事时,就不需要该配置项。比如:配置模板位置,你可以约定,如果放在","另外,每个方法都尽量前置断言传入参数的合法性,后置断言返回结果的合法性,并文档化。","可配置一定可编程,并保持友好的","合理的方式是,有一个单独的","和","和一个","因为使用环境的不确定因素很多,框架总会有一些配置,一般都会到","在重要的过程上设置拦截接口","增量式扩展,而不要扩充原始核心概念","大凡发展的比较好的框架,都遵守微核的理念。eclips","如果你要写个远程调用框架,那远程调用的过程应该有一个统一的拦截接口。如果你要写一个","实现类的实例报上来,框架只是使用这些实例,这些对象是怎么创建的,怎么销毁的,都和框架无关,框架最多提供工具类辅助管理,而不是绝对控制。","实现类的生命周期,action","实现类的类名或类元信息报上来,然后在内部通过反射","实现,web","对象封装了本来要执行过程的上下文,并且","微核插件式,平等对待第三方","或","执行前加下分页包装,做下数据权限控制,统计下","执行时间;如果有人想在请求执行前检查下角色,包装下输入输出流,统计下请求量,等等,就可以自行完成,而不用侵入框架内部。拦截接口,通常是把过程本身用一个对象封装起来,传给拦截器链,比如:远程调用主过程为","扩展接口。框架如果让使用者或扩展者把","扩展接口职责尽可能单一,具有可组合性","接口中。","接口做渲染输出。","接口叫","接口混在了","接口给扩展者控制输出方式,比如用","接口,方法名通常是过去式的,比如","接口,有","方法,是给使用者用来写业务逻辑的。然后,web","方法,由拦截器决定什么时候执行,同时,invoc","是包装的最终的","是给使用者用的,而","是给扩展者用的。在设计时,尽量把它们隔离开,而不要混在一起。也就是说,使用者是看不到扩展者写的实现的。","最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里。","服务域/实体域/会话域分离","服务域也就是行为域,它是组件的功能集,同时也负责实体域和会话域的生命周期管理,","某个值,或","某个属性值,或查询一条数据库记录。命令是指有副作用的,也就是会修改状态,比如","某条数据库记录。如果你的方法即做了修改状态的操作,又做了查询返回,如果可能,将其拆成写读分离的两个方法,比如:user","框架使用一个都继承","框架将","框架或组件通常有两类客户,一个是使用者,一个是扩展者。api","框架有一个","框架,它有一个","框架,那至少","框架,那请求的执行过程应该要有拦截接口,等等。没有哪个公用的框架可以","模板输出的就继承","模板输出还是用","次结果都是一样的,比如","比如","比如上面说的","比如,远程调用框架它的协议是可以替换的。如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持是可以细分为底层通讯,序列化,动态代理方式等等。如果将接口拆细,正交分解,会更便于扩展者复用已有逻辑,而只是替换某部分实现策略。当然这个分解的粒度需要把握好。","比如:一个","没有分离的反面例子,spi","的","的微核是","的执行过程,map","的生老病死,框架都自己做了,外部扩展或集成都无能为力。好的办法是让使用者或扩展者把","的输出转交给","目录下就不用配了,如果你想换个目录,就配置下。","直扫某个指定名称的配置,或者启动时允许指定配置路径。做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行,否则当使用者需要将你的框架与另一个框架集成时就会带来很多不必要的麻烦。","等。服务域的对象通常会比较重,而且是线程安全的,并以单一实例服务于所有调用。","等等。这个核心领域模型及其组成部分称为实体域,它代表着我们要操作的目标本身。实体域通常是线程安全的,不管是通过不变类,同步状态,或复制的方式。","约定","输出的就继承","输出等。如果这个","过程要有拦截接口;如果你要写一个","过程;同理,sql","返回的方法是命令。查询方法通常是幂等性的,无副作用的,也就是不改变任何状态,调","这个是契约式设计的一部分,尽量遵守有返回值的方法是查询方法,void","这里先要讲一个事件和上面拦截器的区别,拦截器是干预过程的,它是过程的一部分,是基于过程行为的,而事件是基于状态数据的,任何行为改变的相同状态,对事件应该是一致的。事件通常是事后通知,是一个","里有一个","重要的状态的变更发送事件并留出监听接口"],"principals/expansibility.html":["8.3","args),后来,有了无接口调用的需求,就是没有接口方法也能调用,并将","args),导致不管是不是无接口调用,都得把","boolean","bu","byte[]","class[]","classload","generalservic","generalserviceimpl","http://javatar.iteye.com/blog/690845","invoke()","invoke(method","invoke(str","map","method","method,","methodname,","new","object[]","osgi","osgi,却为","osgi,这样序列化时,io","parametertyp","parametertypes,","pojo","request","request/respons","request,所以在","respons","response。如果再来一个会话消息发送需求,那就再加一个","returntypes,","session","sessionrequest/sessionrespons","session,不需要","string","string[]","string[]。如果选用增量式扩展,应该是保持原有接口不变,增加一个","与","交互,然后发现,原来同步消息发送是会话消息的一种特殊情况,所有场景都传","从","付出了代价。而如果采用增量式扩展方式,非","再再比如:无状态消息发送,很简单,序列化一个对象发过去就行。后来有了同步消息发送需求,需要一个","再比如:最开始,远程服务都是基于接口方法,进行透明化调用的。这样,扩展接口就是,","出来的,我们不自觉选了一个扩展式扩展,把扩展接口改成了","可能和业务方的","和部门以及产品线的需求,势必会将很多不相干的功能凑在一起,客户可以选择性的使用。为了兼容更多的需求,每个产品,每个框架,都在不停的扩展,而我们经常会选择一些扩展的扩展方式,也就是将新旧功能扩展成一个通用实现。我想讨论是,有些情况下也可以考虑增量式的扩展方式,也就是保留原功能的简单性,新功能独立实现。我最近一直做分布式服务框架的开发,就拿我们项目中的问题开涮吧。","处理。","处理,会话消息发送,再加一个","如果采用增量式扩展,无状态消息发送原封不动,同步消息发送,在无状态消息基础上加一个","实现会将收到的调用转给目标接口,这样就能将新功能增量到旧功能上,并保持原来结构的简单性。","实现即可。","对象是不能直接","对象都转换成","我们平台的产品越来越多,产品的功能也越来越多。平台的产品为了适应各","所在的","接口,里面有一个通用的","数组,拷贝一次。然而,大部分场景都用不上","数组,然后传给业务方的","方法,和其它正常业务上的接口一样的调用方式,扩展接口也不用变,只是","是隔离的。需要将流转换成","比如:远程调用框架,肯定少不了序列化功能,功能很简单,就是把流转成对象,对象转成流。但因有些地方可能会使用","状态,表示要不要返回","环境,都先将流转成","的","的代码原封不动,再加一个","的地方无视即可。","的场景扩展了一下,这样,不管是不是","的实现,要用","的时候,直接依赖","表示。因为","谈谈扩充式扩展与增量式扩展","转成","进行序列化。为了适应","进行配对,采用扩展式扩展,自然想到,无状态消息其实是一个没有","里加一个","需求,把原来非"],"principals/configuration.html":["${dubbo.registry.address}","8.4",">","annot","boolean","classload","classpath","context.xml","d","dcom.xxx.xxxservice=dubbo://10.1.1.1:1234","dsl","dubbo","dubbo.properties,因为该约定经常造成配置冲突。","dubbo.properties,改为全","host","http://javatar.iteye.com/blog/949527","inf/servic","jar","java","jdbc","jdk","jvm","key","key,","meta","plugin.xml","plugin.xml,struts2","properti","propertyplaceholderconfigur","schame","schema,配置简化后很方便。当然,也有它的缺点,就是强依赖","spring","spring,可以提编程接口做了配套方案。","strut","system_properties_mode_override,可以通过","valu","xml","一样约定一个覆盖配置文件,在程序外部,修改部分配置,便于测试。","下加载该配置。我们平台的很多项目也使用类似策略,如:dubbo.properties,comsat.xml","下放置接口类全名文件,内容为每行一个实现类类名,就像","下约定一个以项目为名称的","不管选哪种方式,所有配置项,都应保持同一风格,dubbo","世界里,比较常规的做法,是在","世界里,通常是约定在每个","中的加密算法扩展,脚本引擎扩展,新的","代替,","你可以约定:","依赖。","做为参考值,如果消费方没有配置,就以提供方的配置为准,相当于消费方继承了提供方的建议配置值。而注册中心在传递配置时,也可以在中途修改配置,这样就达到了治理的目的,继承关系相当于:服务消费者","做为配置。有时候这类配置也可以用","允许自定义","包下放一个指定文件加载,比如:eclips","包下,放置名为","包的","即存在描述配置,也有环境配置。一部分用","参数","参数,或者像","另外扩展配置,可能不尽相同。如果只是策略接口实现类替换,可以考虑","另外,dubbo","可编程配置","向前兼容很好办,你只要保证配置只增不减,就基本上能保证向前兼容。但向后兼容,也是要注意的,要为后续加入新的配置项做好准备。如果配置出现一个特殊配置,就应该为这个“特殊”情况约定一个兼容规则,因为这个特殊情况,很有可能在以后还会发生。比如:有一个配置文件是保存“服务=地址”映射关系的,其中有一行特殊,保存的是“注册中心=地址”。现在程序加载时,约定“注册中心”这个key是特殊的,做特别处理,其它的都是“服务”。然而,新版本发现,要加一项“监控中心=地址”,这时,旧版本的程序会把“监控中心”做为“服务”处理,因为旧代码是不能改的,兼容性就很会很麻烦。如果先前约定“特殊标识+xxx”为特殊处理,后续就会方便很多。","向后兼容性,可以多向html5学习,参见:html5设计原理","因为线上只有一个注册中心,这样的配置是没有问题的,而测试环境可能有两个注册中心,测试人员不可能去修改配置,改为:","因为这些配置和业务逻辑相关,放在代码里也是合理的。","在","存在同样的配置时,可能误加载,以及在","对于环境配置,在","对应","就出现过这样的问题,中间层用“地址”做为缓存","扩展配置,比如:协议扩展,策略扩展等。","扩展配置,通常对配置的聚合要求比较高。因为产品需要发现第三方实现,将其加入产品内部。在","扫描","描述配置,比如:服务接口描述,服务版本等。","提供配置时,要同时考虑开发人员,测试人员,配管人员,系统管理员。测试人员是不能修改代码的,而测试的环境很可能较为复杂,需要为测试人员留一些“后门”,可以在外围修改配置项。就像","支持在","支持通过","新版本去掉了","新版本提供了与","方式,去掉过多的","旧版本所有的超时时间,重试次数,负载均衡策略等都只能在服务消费方配置。但实际使用过程中发现,服务提供方比消费方更清楚,但这些配置项是在消费方执行时才用到的。新版本,就加入了在服务提供方也能配这些参数,通过注册中心传递到消费方,","旧版本通过约定在每个","是否使用注册中心,注册中心地址。","是否允许重试,重试次数。","服务提供者","标准的服务发现机制,即在","每个都是先配置一个","注册中心","环境配置,比如:连接数,超时等配置。","现在的设计是完全无侵入,也就是使用者只依赖于配置契约。经过多个版本的发展,为了满足各种需求场景,配置越来越多。为了保持兼容,配置只增不减,里面潜伏着各种风格,约定,规则。新版本也将配置做了一次调整,去掉了","用一个无效值代表关闭,n/a地址,0重试次数等。","的","的值中,通过竖号分隔多个注册中心地址,用于表示多注册中心地址。","的超时时间设置,每个服务,每个方法,都应该可以设置超时时间。但很多服务不关心超时,如果要求每个方法都配置,是不现实的。所以","的项目越来越多,直接使用","直接使远程服务调用绕过注册中心,进行点对点测试。还有一种情况,开发人员增加配置时,都会按线上的部署情况做配置,如:","等。这样有它的优势,就是基于约定,简化了用户对配置加载过程的干预。但同样有它的缺点,当","等结构。如果有复杂的生命周期管理,可能需要","等配置。有时候扩展会通过注册接口的方式提供。","等,这类配置可以考虑","类型的开关,再配置一个值。","而对于描述配置,因为要参与业务逻辑,通常会嵌到应用的生命周期管理中。现在使用","而底层,给“地址”加了一个缺省端口号,导致不加端口号的“地址”和加了缺省端口的“地址”并没有使用相同的缓存。","而描述配置,通常信息比较多,甚至有层次关系,用","自带的","规范。","选的是第二种。相似的还有,超时时间,重试时间,定时器间隔时间。如果一个单位是秒,另一个单位是毫秒(c3p0的配置项就是这样),配置人员会疯掉。","通常环境配置,用","配置。将想到的一些记在这,备忘。","配置一对一的配置类,如:serviceconfig","配置一致性","配置也存在“重复代码”,也存在“泛化与精化”的问题。比如:dubbo","配置会比较方便,因为树结构的配置表现力更强。如果非常复杂,也可以考自定义","配置会比较方便,因为都是一些离散的简单值,用","配置分类","配置加载","配置加载。用户感觉非常不便,所以在新版本中进行了合并,统一放到","配置加载,一部分从","配置加载,也增加了配置的灵活性。","配置可以减少配置的学习成本。","配置向后兼容","配置总会隐含一些风格或潜规则,应尽可能保持其一致性。比如:很多功能都有开关,然后有一个配置值:","配置格式","配置的可编程性是非常必要的,不管你以何种方式加载配置文件,都应该提供一个编程的配置方式,允许用户不使用配置文件,直接用代码完成配置过程。因为一个产品,尤其是组件类产品,通常需要和其它产品协作使用,当用户集成你的产品时,可能需要适配配置方式。","配置的比较普遍,而且","配置的缺省值,通常是设置一个常规环境的合理值,这样可以减少用户的配置量。通常建议以线上环境为参考值,开发环境可以通过修改配置适应。缺省值的设置,最好在最外层的配置加载就做处理。程序底层如果发现配置不正确,就应该直接报错,容错在最外层做。如果在程序底层使用时,发现配置值不合理,就填一个缺省值,很容易掩盖表面问题,而引发更深层次的问题。并且配置的中间传递层,很可能并不知道底层使用了一个缺省值,一些中间的检测条件就可能失效。dubbo","配置继承","配置缺省值","配置覆盖","配置设计","配置进行扩展与集成,新版本改成用","配置,支持","配置,比如:log4j.properties,velocity.properties等。产品在初始化时,自动从","采用了方法超时继承服务超时,服务超时再继承缺省超时,没配置时,一层层向上查找。","隔离时,可能找不到配置,并且,当用户希望将配置放到统一的目录时,不太方便。","首先,配置的用途是有多种的,大致可以分为:","驱动等,都是采用这种方式。参见:serviceprovid",",",",并且属性也一对一,这样有利于文件配置与编程配置的一致性理解,减少学习成本。",",所以这个地方,dubbo"],"principals/robustness.html":["1","10","100","3","8.5","b","client","down)下来。","dubbo","error","exectorservic","http://oldratlee.com/380/tech/java/robust","implement.html","ip、使用的是哪个注册中心;调用的是哪个服务、哪个方法等等。这些信息如果不给出,那么事后人工收集的,问题过后现场可能已经不能复原,加大排查问题的难度。","log","server","warn","上一点的子问题。dubbo","严格约定warn、error级别记录的内容","中碰到有两个相关的场景。","中,饱和策略是丢弃数据,等待结果也只是请求的超时。","会同时接收事件,而去重连另一个注册中心。client","会被清除。数据库正常时,这个机制运行良好。但是数据库负荷高时,其上的每个操作都会很慢。这就出现:","作为远程服务暴露、调用和治理的解决方案,是应用运转的经络,其本身实现健壮性的重要程度是不言而喻的。","出问题时的现场信息,即排查问题要用到的信息。如服务调用失败时,要给出使用","分钟、第三次","分钟。","分钟,把重连分散开。","分钟,第二次","发现自己数据被删除时(写入失败),选择等待这段时间再重试。重试时间可以选择指数级增长,如第一次等","发现自己的数据没有了,重新写入自己的数据的反复操作。这些反复的操作又加重了数据库的负荷,恶化问题。","可以使用下面逻辑:","同一个或是一类异常日志连续出现几十遍的情况,还是常常能看到的。人眼很容易漏掉淹没在其中不一样的重要日志信息。要尽量避免这种情况。在可以预见会出现的情况,有必要加一些逻辑来避免。","同一个或是一类问题不要重复记录多次","哪些是关键信息呢?","在","如为一个问题准备一个标志,出问题后打日志后设置标志,避免重复打日志。问题恢复后清除标志。","如果可能,给出问题的原因和解决方法。这让维护和问题解决变得简单,而不是寻求精通者(往往是实现者)的帮助。","如果确保进入集合的元素是可控的且是足够少,则可以放心使用。这是大部分的情况。如果不能保证,则使用有有界的集合。当到达界限时,选择一个合适的丢弃策略。","字串就报警,又尽量减少了发生。过多的报警会让人疲倦,使人对报警失去警惕性,使","容错","当","当一个注册中心停机时,其它的","恢复","数据库上的活锁","数量相对比较多,会对注册中心造成冲击。避免方法可以是","日志","日志中,尽量多的收集关键信息","日志失去意义。再辅以人工定期查看","日志是发现问题、查看问题一个最常用的手段。日志质量往往被忽视,没有日志使用上的明确约定。重视","有了这样的约定,监管系统发现日志文件的中出现","服务消息者从注册中心拿到提供者列表后,会保存提供者列表到内存和磁盘文件中。这样注册中心宕后消费者可以正常运转,甚至可以在注册中心宕机过程中重启消费者。消费者启动时,发现注册中心不可用,会读取保存在磁盘文件中提供者列表。重试逻辑保证注册中心恢复后,更新信息。","服务的消费者","注册中心会定时更新数据库一条记录的时间戳,这样集群中其它的注册中心感知它是存活。过期注册中心和它的相关数据","注册中心认为","用到的原则和方法。","界限设置","的任务等待队列使用有限队列,避免资源耗尽。当任务等待队列饱和时,选择一个合适的饱和策略。这样保证平滑劣化。","的使用,提高","的信息浓度。日志过多、过于混乱,会导致有用的信息被淹没。","的数据。","的服务注册中心","的版本、服务提供者的","目前服务注册中心使用了数据库来保存服务提供者和消费者的信息。注册中心集群不同注册中心也通过数据库来之间同步数据,以感知其它注册中心上提供者。注册中心会内存中保证一份提供者和消费者数据,数据库不可用时,注册中心独立对外正常运转,只是拿不到其它注册中心的数据。当数据库恢复时,重试逻辑会内存中修改的数据写回数据库,并拿到数据库中新数据。","端用于处理请求的","等等。不要因为外部的请求、数据不受限的而崩溃。","级别信息,以评估系统的“亚健康”程度。","线程池(exectorservice)的大小和饱和策略","虽然有点麻烦,但是这样做保证日志信息浓度,让监控更有效。","表示可以恢复的问题,无需人工介入。","表示需要人工介入问题。","要有效利用这个工具要注意:","设置上限。executorservic","设计实现的健壮性","资源是有限的,cpu、内存、io","达到饱和时,说明已经达到服务提供方的负荷上限,要在饱和策略的操作中日志记录这个问题,以发出监控警报。记得注意不要重复多次记录哦。(注意,缺省的饱和策略不会有这些附加的操作。)根据警报的频率,已经决定扩容调整等等,避免系统问题被忽略。","过期,删除","这样操作减少后,保证数据库可以冷却(cool","这里列出一些","重试","重试延迟策略","重连时随机延时","重连注册中心","集合容量","高可用组件要容忍其依赖组件的失败。"],"principals/dummy.html":["!","!=","\"","\"$deploy_home\"","\"$dump_pids\"","\".\\c\"","\".class\");","\"2.0.0\");","\"dump","\"ok!\"","\"the","$0`","$2}'`","$dump_dat","$dump_dir","$dump_dir/free.dump","$dump_dir/iostat.dump","$dump_dir/jinfo","$dump_dir/jmap","$dump_dir/jstack","$dump_dir/jstat","$dump_dir/lsof","$dump_dir/mpstat.dump","$dump_dir/netstat.dump","$dump_dir/sar.dump","$dump_dir/uptime.dump","$dump_dir/vmstat.dump","$dump_pid","$dump_root","$host_nam","$java_home/bin/jinfo","$java_home/bin/jmap","$java_home/bin/jstack","$java_home/bin/jstat","$pid","$pid.dump","&amp;&amp;","&gt;","'/')","'{print","(file","(files.size()","(matcher.find()","(throwabl","(url","(urls.hasmoreelements())","(version","+","+%y%m%d%h%m%s`","......,多好的同学,看到错误的人复制一下就完事了,我们该学学。可以把常见的错误故意犯一遍,看看错误信息能否自我搞定问题,","...\\c\"","//","/bin/netstat","/usr/bin/fre","/usr/bin/iostat","/usr/bin/mpstat","/usr/bin/sar","/usr/bin/uptim","/usr/bin/vmstat","/usr/sbin/lsof","0","0)","1)","10.20.130.20","10.20.130.20:20880","10.20.16.3","1000","1;","20880","2>&1","50","8.6","9\\\\.\\\\","9][0",":",";","=","==",">","?","[","]*)\\\\.jar\");","];","appop","b","c","catch","checkduplicate(class","checkduplicate(cls.getname().replace('.',","checkduplicate(str","class","classpath","cls)","cls,","cls.getpackage().getimplementationversion();","cls.getpackage().getspecificationversion();","cls.getprotectiondomain().getcodesource().getlocation().getfile();","context","d","defaultvers","defaultversion)","defaultversion;","delegate.error(msg","deploy_home=`dirnam","done","dump","dump_date=`d","dump_dir=$dump_root/dump","dump_pids=`p","dump_root=$output_home/dump","dump,进行自动备份,这样就不会有人为疏忽。dump脚本示例:","duplic","duplicate()","duplicate.checkduplicate(\"xxx.properties\");","duplicate.checkduplicate(xxx.class);","e","e)","e);","echo","enumer","error(str","exit","f","fail","failed?","fi","file","file.endswith(\".jar\"))","file.length()","files);","files.add(file);","files.size()","final","gccapac","gcutil","getbean","getversion(){","getversion(class","getversion(version.class,","grep","hashset();","head","heap","histo","host_name=`hostname`","http://javatar.iteye.com/blog/804187","inetaddress.getlocalhost()","ip","jar","java","java_home=/usr/java","kill","logger","logger.error(\"dupl","logger.error(e.getmessage(),","loggerfactory.getlogger(version.class);","matcher","matcher.group(1);","matcher.groupcount()","mkdir","msg,","new","null","null)","output_home=~/output","p","path","path)","pattern","pattern.compile(\"([0","pid","privat","public","r","return","sa","server","session","set","spring","started!\"","static","string","t","telnet","thread.currentthread().getcontextclassloader().getresources(path);","throwabl","tri","url","url.getfile();","urls.nextelement();","us","version","version()","version.getversion(),","version.length()","version;","version_pattern","version_pattern.matcher(file);","void","web","web.xml","width","z","{","{}","|","|awk","||","}","下放一个约定的配置,如果项目中有多个,通常会取jvm加载的第一个,为了不被这么低级的问题折腾,和上面的重复jar包一样,在配置加载的地方,加上:","中加入:","之前先","之间的网络不通,请在","什么原因","会报一个错,错误信息写着:请在","使用","出错?","到","加载,如果在","包中挑一个一定会加载的类,加上重复类检查,给个示例:","在classpath搜文件","在给应用排错时,最怕的就是那种只有简单的一句错误描述,啥信息都没有的异常信息。比如上次碰到一个","在重启前,先手工将出错现场所有数据备份一下,所以最好在","多个项目在使用,每天都要去帮应用查问题,来来回回,发现大部分都是配置错误,或者重复的文件或类,或者网络不通等,所以准备在新版本中加入防痴呆设计。估且这么叫吧,可能很简单,但对排错速度还是有点帮助,希望能抛砖引玉,也希望大家多给力,想出更多的防范措施共享出来。","如果manifest.mf规范中没有版本号,基于jar包名获取版本号","如果有多个,就表示重复","开通访问权限\"","异常信息给出解决方案","异常,就这几个单词,啥都没有,哪个","必填配置估计大家都会检查,因为没有的话,根本没法运行。但对一些可选参数,也应该做一些检查,比如:服务框架允许通过注册中心关联服务消费者和服务提供者,也允许直接配置服务提供者地址点对点直连,这时候,注册中心地址是可选的,但如果没有配点对点直连配置,注册中心地址就一定要配,这时候也要做相应检查。","忽略异常,返回缺省版本号","或者把平时支持应用时遇到的问题及解决办法都写到异常信息里。","日志信息包含环境信息","时","最痴呆的问题,就是有多个版本的相同jar包,会出现新版本的","最近有点痴呆,因为解决了太多的痴呆问题。服务框架实施面超来超广,已有","检查所有可选配置","检查重复工具类:","检查重复的jar包","检查重复的配置文件","段判断是不是跨机房。另外一个例子,是","每次应用一出错,应用的开发或测试就会把出错信息发过来,询问原因,这时候我都会问一大堆套话,用的哪个版本呀?是生产环境还是开发测试环境?哪个注册中心呀?哪个项目中的?哪台机器呀?哪个服务?","每次线上环境一出问题,大家就慌了,通常最直接的办法回滚重启,以减少故障时间,这样现场就被破坏了,要想事后查问题就麻烦了,有些问题必须在线上的大压力下才会发生,线下测试环境很难重现,不太可能让开发或","没有被启动,spring","测试一下网络,如果是跨机房调用,可能是防火墙阻挡,请联系","的","看了都快疯掉,因是线上环境不好调试,而且有些场景不是每次都能重现。异常最基本要带有上下文信息,包括操作者,操作目标,原因等,最好的异常信息,应给出解决方案,比如上面可以给出:\"从","等等,上面甚至可以根据","类,而且和jvm加载顺序有关,问题带有偶然性,误导性,遇到这种莫名其妙的问题,最头疼,所以,第一条,先把它防住,在每个","类,调用了旧版本的","累啊,最主要的是,有些开发或测试人员根本分不清,没办法,只好提供上门服务,浪费的时间可不是浮云,所以,日志中最好把需要的环境信息一并打进去,最好给日志输出做个包装,统一处理掉,免得忘了。包装logger接口如:","脚本之前调用","获取版本号工具类:","返回版本号,如果为空返回缺省版本号","配置文件加载错,也是经常碰到的问题。用户通常会和你说:“我配置的很正确啊,不信我发给你看下,但就是报错”。然后查一圈下来,原来他发过来的配置根本没加载,平台很多产品都会在","防御性容错","防痴呆设计","首先查找manifest.mf规范中的版本号"],"principals/extension.html":["(activ","++;","//","8.7",";",">","abstract","abstractinvok","accesslog,","activ","args)","chain,","chain.invoke(inv);","com.alibaba.xxx.xxxprotocol。dubbo","count,","createexporter(str","createexporter(url","delay,而网站的同学也希望参与进来,加上领域的推动,所以平台计划将部分项目对公司内部开放,让大家一起来实现,dubbo","directori","doinvoke(inv);","doinvoke(invoc","dubbo","echo,","export","export(str","export(url","exporter,","factori","factory、ioc、osgi","failover,","filter","filterchain","generic,","host,","http","http://javatar.iteye.com/blog/1041832","implement","inf/services/","inf/services/com.alibaba.dubbo.rpc.protocol,内容为","int","inv)","invoc","invocation)","invocationhandler,","invok","invoke(invoc","invoke(invok","invoke(method","invoker,","invoker,减少概念。","ioc","jar","jdk","limit","limitfilt","loadbalance,","map,","max)","meta","method,","mock,","monitor,","notify();","object","object[]","ocp","paramet","params);","port,","protect","protocol","public","publish","publisher,","remot","result","rout","route,","router,","routinginvokergroup","routing。所以,将","rpc","rpcexcept","rpcexception;","run?而哪些又是不能踢掉的?基于这样考虑,可以将","serviceload","spi","spring","subscriber,","throw","throwable;","token,","url","url)","url);","wait();","xxx.jar","{","}","一样可以","上面的设计,不自觉的就将","中放置文件:meta","为试点项目之一。","也能复用序列化等实现。这样,需为传输方式,客户端实现,服务器端实现,协议头解析,数据序列化,都留出不同扩展点。","以字符串传递,不停的解析和拼装,没有一个","伪代码","但它们的作用是一样的,只是一个在客户端,一个在服务器端,却采用了不一样的模型类。","但这些都是核心吗?踢掉哪些,rpc","作为","使用一致模型:","保持尽可能少的概念,有助于理解,对于开放的系统尤其重要。另外,各接口都使用一致的概念模型,能相互指引,并减少模型转换,","先看一下","其实都是","再比如,url","再比如,协议扩展,扩展者可能只是想替换序列化方式,或者只替换传输方式,并且","再比如,现有的:invoker,","写死了。","分解成两个层次,只是","包的","即然要扩展,扩展点的加载方式,首先要统一,微核心+插件式,是比较能达到","原则的思路。","原因参见:谈谈扩充式扩展与增量式扩展。","和","实现。","实现,每个功能都是调用链上的一环。","容器。自已造一个小的","容器,也觉得有点过度设计,所以打算采用最简单的","就要留一些扩展点,让参与者尽量黑盒扩展,而不是白盒的修改代码,否则分支,质量,合并,冲突都会很难管理。","并约定所有插件,都必须标注:@extension(\"name\"),作为加载后的标识性名称,用于配置选择。","才是","扩展机制,参见:java.util.serviceloader,也就是扩展者在","扩展点重构","扫描到所有","拆分后,设计如下:","改成:(链式过滤器)","整理后,设计如下:","方式管理插件。","既然要开放,那","时而","最终决定采用的是","标准的","核心的一个扩展,设计如下:","模型类,","每个扩展点的实现者,往往都只是关心一件事,现在的扩展点,并没有完全分离。比如:failover,","比如,invok","比如:(基类模板方法)","没有完全分开,全由","泛化式扩展指:将扩展点逐渐抽象,取所有功能并集,新加功能总是套入并扩充旧功能的概念。","现在很多的逻辑,都是放在基类中实现,然后通过模板方法回调子类的实现,包括:local,","现有","现有功能都当成了核心功能。上面的概念包含了","现有的设计:","由一个插件生命周期管理容器,构成微核心,核心不包括任何功能,这样可以确保所有功能都能被替换,并且,框架作者能做到的功能,扩展者也一定要能做到,以保证平等对待第三方,所以,框架自身的功能也要用插件的方式实现,不能有任何硬编码。","的协议,只需在","的参数,却时而","的所有功能,包括:proxy,","的方法签名为:","的核心。其它,包括","的现有开发人员能实现的需求有限,很多需求都被","的适用面,不想强依赖","目录下放置与接口同名的文本文件,内容为接口实现类名,多个实现类名用换行符分隔。比如,需要扩展","第一步,微核心,插件式,平等对待第三方","第三步,全管道式设计,框架自身逻辑,均使用截面拦截实现","第二步,每个扩展点只封装一个变化因子,最大化复用","第五步,分层,组合式扩展,而不是泛化式扩展","第六步,整理,梳理关系","第四步,最少概念,一致性概念模型","等","等方式管理插件生命周期。考虑","等等,可以全部拆分使用","等,","类包装,","组合式扩展指:将扩展点正交分解,取所有功能交集,新加功能总是基于旧功能之上实现。","而","行为的不同阶段,完全可以抽象掉,统一为","这里面虽然有部分扩展接口,但并不能很好的协作,而且扩展点的加载和配置都没有统一处理,所以下面对它进行重构。","通常微核心都会采用","通过","都不核心,而是","随着服务化的推广,网站对dubbo服务框架的需求逐渐增多,dubbo"],"release.html":["2","2.4.x","2.4.x。是","2.5.x","2.5.x。加新功能的版本,会给对新功能有需求的应用试用。","2.6.0,作为新功能开发版本。","9","bug","bugfix","bugfix,升级第三位版本号。","bugfix,推广使用此版本。如何可行,可以推进应用在期望的时间点内升级到","fix","ga","不会版本过多,导致开发和维护成本剧增","不再开发,应用碰到","个版本并行开发","从","优势","会火速","使用如下的版本开发模式来保障两者。","保持","发现的问题。","只会作","和","在","够稳定后:","定期升级版本用户带来了不安。这是一个假命题,说明如下:","对产品都很重要。但是添加新功能会影响稳定性,dubbo","成为","拉成分支","新功能可以高版本中快速响应,并让应用能试用新功能。","新功能版本:高版本,比如","新功能的开发","版本。","版本前有试用阶段","版本是稳定的!因为:","版本有","版本管理","版本(可以跨了多个版本)定期升级平摊风险(类似小步快跑)。经历过周期长的大项目的同学会有这样的经历,三方库版本长时间不升级,结果出了问题不得不升级到新版本(跨了多个版本)风险巨大。","版本,以","版本,只","版本,所以用户需要积极跟进升级到","版本,线上使用的版本,只会","版本:低版本,比如","用户要配合的职责","由于开发只会","的新功能基本稳定后,进入","相对出问题才升级到","稳定性的提高","经过一个试用阶段保持稳定。","让直接升级。(这个称为“夕阳条款”)","试用阶段。找足够多的应用试用"],"contribution.html":["0%","02","04","10","20%","2012","27","30","90%","ac","avro","bug,或修改框架本身,可以从","cacti","cglib","dubb","dubbo","fork","github","ic","jcr/jsr283","jms&activemq","jmx","jndi","jrobin","json","jsr140&slp","jsr181&cxf(webservice)","jsr311&jsr339(restfulwebservice)","jta/xa分布式事务","ldap","logstash","maven","nagio","protobuf","push","request","rpc","simpledeploy","simpleschedul","snmp","subvers","thrift","uddi","xml","xsocket","《开发指南》翻译","《用户指南》翻译","上","任务","优先级","传输扩展","低","修改后通过","分类","功能","功能单元测试","动态代理扩展","协议扩展","反馈修改。","如果是扩展功能,直接新增工程,黑盒依赖","如果是改","工程。","已认领","序列化扩展","开发完成","待定","性能基准测试","扩展点兼容性测试","拦截扩展","文档","服务安装包仓库","未认领","本地部署代理","朱启恒","注册中心扩展","流程","测试","状态","白文志","的","监控中心扩展","罗立树","计划完成时间","认领者","调研","贡献","资源调度器","进度","进行扩展。","闾刚","高"],"checklist.html":["11","bug","chang","check","checklist","code","code(正常流程/异常流程)","find","jira","list","owner","owner,确保","partner","patternercheck","scope","svn","test","ticket","代码注释写清楚,用中文无妨","以上内容都写到ticket的评论上","以用户的方式运行一下功能","修复代码前先写测试用例","修复代码前先建","修复时","关联","发布前","发现问题、添加测试(集成测试)复现总是;owner","向","和","契约文档化","完成实现。(保证两方的时间投入","检查列表","每个版本要有","的给予时间保证)","讲一遍逻辑","讲述一遍实现。","过一遍","需要伙伴检查"],"code-smell.html":["\"dubbo\"))","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},表示先在","\"script\"))","\"script\")).addparameter(\"type\",","#","$adp","()","(称为幽灵连接),","1.","12","2.","3.","4.","5.",";","==",">provid","@adapt","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@extens","adapt","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","arg1,","arg2);","attach","b","callback","car","class","codec","com.alibaba.dubbo.xxx.yyyinvokerwrapp","connect","consum","default","destroy","dubbo","dubbocodec","dubboprotocol","export","export(dubbo://provid","export(registry://registri","exporter,此处用于","extens","extension\");","extensionload","getregistry(dubbo://registri","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","group","id,在获取","if(是否有url类型方法参数?)","if(是否有方法类型上有url属性)","if(获取的url","illegalargumentexception(\"url","illegalstateexception(\"fail","illegalstateexception。如果不设置则缺省使用","implement","interfac","invoc","invok","jvm","key","key1","key2","lazi","lazy连接","loadbal","method!\");","new","notify(dubbo://provid","notify(route://registri","null\");","null)","object,所以将实例方法存储在","onreturn","onreturn/onerror...","packag","path","provid","public","read(file))","refer","refer(dubbo://provid","refer(registry://registri","register(dubbo://provid","run(url","staticmap","sticki","string","string[]","subscribe(dubbo://registri","suffix(file)).addparameter(\"rule\",","tcp","throw","timeout","token","type1","type2","unsupportedoperationexception(\"i","url","url,","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","url,但","valu","value,使用缺省的扩展。如果没有设定缺省扩展,则方法调用会抛出","value,使用缺省的扩展(在接口的","value,则使用","version","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","}","上找","与","中取得回调服务实例的","中实现。此处需要考虑将此逻辑与","中没有支持","中的下一个(如果不是最后一个),避免碰撞。","中的多个服务,共享连接是说","中设定的值)。比如,string[]","中,此处实现需要进行改造。","为了在传输时能够对回调接口实例进行转换,自动暴露与自动引用目前在","主要原理:","主要原理:consum","事件通知","从文件加载路由规则","从文件加载路由规则:","从注册中心订阅服务:","会为扩展点自动生成自适应扩展点类(通过字节码),并将其实例注入。","作为要","使用的","使用该url参数","使用该url属性","信息获取","全部","共享连接","则将","功能","加载扩展点时,会检查扩展点的属性(通过set方法判断),如该属性是扩展点类型,则会注入扩展点对象。因为注入时不能确定使用哪个扩展点(在使用时确定),所以注入的是一个自适应扩展(一个代理)。自适应扩展点调用时,选取一个真正的扩展点,并代理到其上完成调用。dubbo","参数回调","参数(整个扩展点网的上下文信息)。自适应扩展即是从","名。","名;key1","后,在提供者可用的情况下,调用会继续发送到上一次的服务提供者。sticki","后,连接需要关闭,另一方面还需要注意如何避免部分","向注册中心暴露服务:","哪个","在","在一个","在扩展点实现调用该方法,并返回结果。","在根据","坏味道","处于可用状态,则进行后续调用","多个服务调用是通过同一个","如url没有value,则使用缺省扩展点实现。如没有扩展点,","如果","如果所有的服务提供者都不可用,重新遍历整个列表(优先从没有选过的列表中选择),判断是否有可用的服务提供者(选择过程中,不可用的服务提供者可能会恢复到可用状态),如果有,则进行后续调用","如果第一步选择的服务提供者不可用,则从剩余服务提供者列表中继续选择,如果可用,进行后续调用","如果第三步没有选择出可用的服务提供者,会选第一步选出的","存在多个服务提供者的情况下,首先根据","实现细节:","实现细节:参数的传递采用","实现细节:对于同一个地址由于使用了共享连接,那","对应的参数值(实例方法)加入到异步调用的回调列表中。","就需要特别注意,一方面要满足对同一个地址","引用了","当客户端与服务端创建代理时,暂不建立","成的","扩展点的加载","接口","接口做不同的实现。","接口类名的点分隔小写字串。即对于","方法时,判断如果有配置","时不能关闭连接。在实现中采用了引用计数的方案,但为了防范,在连接关闭时,重新建立了一个","时,需要判断是否是回调,如果是回调,会从","是根据调用方法参数(上面有调用哪个扩展点的信息)来选取一个真正的扩展点。","暴露了多个服务,jvm","有多个服务提供者的情况下,配置了","服务分组","服务提供者选择逻辑","服务版本","服务路径","根据@adaptive注解上声明的key的顺序,从url获致value,作为实际扩展点名。","此项功能自动关闭连接重试功能,开启发送重试功能(即发送数据时如果连接已断开,尝试重新建立连接)","没有","注册中心推送路由规则","注册中心路由规则推送:","注册服务地址:","注解使用如下:","注解在方法上说明。","点对点暴露和引用服务","点对点直连服务:","版本","特有功能,默认关闭。","特有功能,默认开启。","生成的自适应扩展点类如下:","用于当出现异常场景时,避免影响业务逻辑的正常调用.","用于避免开启无用的连接.","用来确定使用哪个扩展点,这个信息通过的","由于自适应扩展点的上面的约定,extensionload","的","的缺省值为","的长连接上,自动在","直接暴露服务:","确定要调用哪个扩展点实现。url","端便可反向调用到","端可以对同一个","端暴露一个服务(实现方法参数上声明的接口a),provid","端的接口实例。","策略","策略默认开启了连接的","给定所有的扩展点上调用都有","自适应扩展点","获取注册中心:","获取路由器:","订阅服务地址:","设计或实现不优雅的地方。","调用参数","调用超时","转换","这些","这里记录的是","进行选择,如果选择的","选项,","通知服务地址:","通过注册中心引用服务","通过注册中心暴露服务","逻辑分离。","都没有","长连接进行数据传输,已达到减少服务端连接数的目的.","长连接,当有数据请求时在做连接初始化。","验证令牌"],"TCK.html":["(technolog","13","cdi","compat","dubbo","final/html/introduction.html","jboss","kit),用户增加一种扩展实现,只需通过","protocol","registri","tck","tck,做一个","tck,即可确保与框架的其它部分兼容运行,可以有效提高整体健状性,也方便第三方扩展者接入,加速开源社区的成熟。","todo","参见:http://docs.jboss.org/cdi/tck/reference/1.0.1","基础框架,在此之上实现","如果大家有兴趣,也可以一起研究,和行知一块讨论。","开源社区的行知同学已着手研究这一块,他的初步想法是借鉴","所以,我们需要对核心扩展点写","技术兼容性测试","用例。","的","的协议,通讯,序列化,注册中心,负载均策等扩展点,都有多种可选策略,以应对不同应用场景,而我们的测试用例很分散,当用户自己需要加一种新的实现时,总是不确定能否满足扩展点的完整契约。","的扩展点"]},"length":47},"tokenStore":{"root":{"0":{"2":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"4":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}},"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0071174377224199285}}},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.11363636363636363}}}},"1":{"0":{"0":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}},"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464},"contribution.html":{"ref":"contribution.html","tf":5}},".":{"2":{"0":{"docs":{},".":{"1":{"3":{"0":{"docs":{},".":{"2":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},":":{"2":{"0":{"8":{"8":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"6":{"docs":{},".":{"3":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"1":{"docs":{"checklist.html":{"ref":"checklist.html","tf":5}}},"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"code-smell.html":{"ref":"code-smell.html","tf":5}}},"3":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5}}},"docs":{"build.html":{"ref":"build.html","tf":5},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},".":{"5":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}},"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.017094017094017096},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}}},":":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}},",":{"docs":{},"放":{"docs":{},"置":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"2":{"0":{"1":{"2":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.011363636363636364}}},"docs":{}},"8":{"8":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}},"docs":{}},"docs":{},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"7":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}},"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"design.html":{"ref":"design.html","tf":5},"release.html":{"ref":"release.html","tf":0.014084507042253521}},".":{"2":{"docs":{},".":{"1":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}},"docs":{}}},"4":{"docs":{},".":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}},"。":{"docs":{},"是":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}},"5":{"docs":{},".":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.08450704225352113}},"。":{"docs":{},"加":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"会":{"docs":{},"给":{"docs":{},"对":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"有":{"docs":{},"需":{"docs":{},"求":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"试":{"docs":{},"用":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{},".":{"0":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"开":{"docs":{},"发":{"docs":{},"版":{"docs":{},"本":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}},"docs":{}}},"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.017094017094017096},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},">":{"docs":{},"&":{"1":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875}}},"docs":{}}}},"3":{"0":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":5},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"4":{"docs":{"implementation.html":{"ref":"implementation.html","tf":5}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"5":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.333333333333333}},".":{"1":{"0":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":5}}},"1":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5}}},"2":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5}}},"3":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5}}},"4":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5}}},"5":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5}}},"6":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":5}}},"7":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":5}}},"8":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5}}},"9":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":5}}},"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":5}}},"2":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":3.333333333333333}}},"1":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5}}},"2":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":5}}},"3":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5}}},"4":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":5}}},"5":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":5}}},"6":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5}}},"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":5}}},"3":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5}}},"4":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5}}},"5":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":5}}},"6":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5}}},"7":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5}}},"8":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5}}},"9":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":5}}},"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},",":{"docs":{},"而":{"docs":{},"该":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"6":{"docs":{"contract.html":{"ref":"contract.html","tf":5}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}},"7":{"docs":{"coding.html":{"ref":"coding.html","tf":5}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},"8":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":5}},".":{"1":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":5}}},"2":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":5}}},"3":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":5}}},"4":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":5}}},"5":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":5}}},"6":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":5}}},"7":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":5}}},"docs":{}}},"9":{"0":{"docs":{},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}},"docs":{"release.html":{"ref":"release.html","tf":5}},"\\":{"docs":{},"\\":{"docs":{},".":{"docs":{},"\\":{"docs":{},"\\":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"]":{"docs":{},"[":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}}}},"docs":{},"d":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"o":{"docs":{"./":{"ref":"./","tf":0.42857142857142855},"build.html":{"ref":"build.html","tf":0.03571428571428571},"design.html":{"ref":"design.html","tf":0.05089820359281437},"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806},"implementation.html":{"ref":"implementation.html","tf":0.025974025974025976},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.030303030303030304},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.04519774011299435},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.05154639175257732},"principals/extension.html":{"ref":"principals/extension.html","tf":0.024896265560165973},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788},"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259},"TCK.html":{"ref":"TCK.html","tf":0.0967741935483871}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"该":{"docs":{},"约":{"docs":{},"定":{"docs":{},"经":{"docs":{},"常":{"docs":{},"造":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"改":{"docs":{},"为":{"docs":{},"全":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}}}}}}}}}},"b":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},">":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"_":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"=":{"docs":{},"`":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"i":{"docs":{},"r":{"docs":{},"=":{"docs":{},"$":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"=":{"docs":{},"`":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"=":{"docs":{},"$":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"自":{"docs":{},"动":{"docs":{},"备":{"docs":{},"份":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"就":{"docs":{},"不":{"docs":{},"会":{"docs":{},"有":{"docs":{},"人":{"docs":{},"为":{"docs":{},"疏":{"docs":{},"忽":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"示":{"docs":{},"例":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"d":{"docs":{},"u":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"e":{"docs":{},".":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"e":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},".":{"docs":{},"s":{"docs":{},"a":{"docs":{},"y":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},"\"":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"\"":{"docs":{},",":{"docs":{},"剔":{"docs":{},"除":{"docs":{},"添":{"docs":{},"加":{"docs":{},"所":{"docs":{},"有":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"插":{"docs":{},"入":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"i":{"docs":{},"d":{"docs":{},")":{"docs":{},",":{"docs":{},"删":{"docs":{},"除":{"docs":{},"用":{"docs":{},"户":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"被":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"改":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}},"a":{"docs":{},"y":{"docs":{},",":{"docs":{},"而":{"docs":{},"网":{"docs":{},"站":{"docs":{},"的":{"docs":{},"同":{"docs":{},"学":{"docs":{},"也":{"docs":{},"希":{"docs":{},"望":{"docs":{},"参":{"docs":{},"与":{"docs":{},"进":{"docs":{},"来":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{},"领":{"docs":{},"域":{"docs":{},"的":{"docs":{},"推":{"docs":{},"动":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"平":{"docs":{},"台":{"docs":{},"计":{"docs":{},"划":{"docs":{},"将":{"docs":{},"部":{"docs":{},"分":{"docs":{},"项":{"docs":{},"目":{"docs":{},"对":{"docs":{},"公":{"docs":{},"司":{"docs":{},"内":{"docs":{},"部":{"docs":{},"开":{"docs":{},"放":{"docs":{},",":{"docs":{},"让":{"docs":{},"大":{"docs":{},"家":{"docs":{},"一":{"docs":{},"起":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"`":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856}}}}}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}},"i":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}},"c":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}}},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}}},"w":{"docs":{},"n":{"docs":{},")":{"docs":{},"下":{"docs":{},"来":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"n":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"1":{"docs":{},".":{"1":{"docs":{},".":{"1":{"docs":{},":":{"1":{"2":{"3":{"4":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":10}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"j":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010964912280701754},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008547008547008548},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"e":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"build.html":{"ref":"build.html","tf":0.026785714285714284}}}}}},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.03293413173652695},"implementation.html":{"ref":"implementation.html","tf":0.03896103896103896},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.04182509505703422},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"去":{"docs":{},"掉":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"这":{"docs":{},"样":{"docs":{},"其":{"docs":{},"它":{"docs":{},"人":{"docs":{},"只":{"docs":{},"要":{"docs":{},"关":{"docs":{},"注":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{},"概":{"docs":{},"念":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608}},",":{"docs":{},"那":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"接":{"docs":{},"口":{"docs":{},"通":{"docs":{},"常":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"c":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}}}},"f":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"全":{"docs":{},"限":{"docs":{},"定":{"docs":{},"名":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},":":{"docs":{},"配":{"docs":{},"置":{"docs":{},"名":{"docs":{},"=":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"全":{"docs":{},"限":{"docs":{},"定":{"docs":{},"名":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"用":{"docs":{},"换":{"docs":{},"行":{"docs":{},"符":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588}},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}},"i":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856}},"e":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},":":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}},",":{"docs":{},"在":{"docs":{},"获":{"docs":{},"取":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403}}}},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.04065040650406504},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.08333333333333333},"impls/router.html":{"ref":"impls/router.html","tf":0.05970149253731343},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.05714285714285714},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.017094017094017096},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223}}}}},"e":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}},"o":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198}}}}}}}}},")":{"docs":{},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"、":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},";":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"、":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"这":{"docs":{},"些":{"docs":{},"信":{"docs":{},"息":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"给":{"docs":{},"出":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"事":{"docs":{},"后":{"docs":{},"人":{"docs":{},"工":{"docs":{},"收":{"docs":{},"集":{"docs":{},"的":{"docs":{},",":{"docs":{},"问":{"docs":{},"题":{"docs":{},"过":{"docs":{},"后":{"docs":{},"现":{"docs":{},"场":{"docs":{},"可":{"docs":{},"能":{"docs":{},"已":{"docs":{},"经":{"docs":{},"不":{"docs":{},"能":{"docs":{},"复":{"docs":{},"原":{"docs":{},",":{"docs":{},"加":{"docs":{},"大":{"docs":{},"排":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},"难":{"docs":{},"度":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"f":{"docs":{},"(":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"类":{"docs":{},"型":{"docs":{},"方":{"docs":{},"法":{"docs":{},"参":{"docs":{},"数":{"docs":{},"?":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"类":{"docs":{},"型":{"docs":{},"上":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"属":{"docs":{},"性":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"的":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"设":{"docs":{},"置":{"docs":{},"则":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"使":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"发":{"docs":{},"的":{"docs":{},"人":{"docs":{},"群":{"docs":{},"。":{"docs":{},"主":{"docs":{},"要":{"docs":{},"涵":{"docs":{},"盖":{"docs":{},"了":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}},"完":{"docs":{},"成":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}}},"通":{"docs":{},"访":{"docs":{},"问":{"docs":{},"权":{"docs":{},"限":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"源":{"docs":{},"社":{"docs":{},"区":{"docs":{},"的":{"docs":{},"行":{"docs":{},"知":{"docs":{},"同":{"docs":{},"学":{"docs":{},"已":{"docs":{},"着":{"docs":{},"手":{"docs":{},"研":{"docs":{},"究":{"docs":{},"这":{"docs":{},"一":{"docs":{},"块":{"docs":{},",":{"docs":{},"他":{"docs":{},"的":{"docs":{},"初":{"docs":{},"步":{"docs":{},"想":{"docs":{},"法":{"docs":{},"是":{"docs":{},"借":{"docs":{},"鉴":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"源":{"docs":{},"码":{"docs":{},"、":{"docs":{},"设":{"docs":{},"计":{"docs":{},"有":{"docs":{},"兴":{"docs":{},"趣":{"docs":{},"的":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"有":{"docs":{},"意":{"docs":{},"愿":{"docs":{},"加":{"docs":{},"入":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":5.008928571428571}}}}},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403},"implementation.html":{"ref":"implementation.html","tf":0.03116883116883117},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.043478260869565216},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.03954802259887006},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572},"TCK.html":{"ref":"TCK.html","tf":0.06451612903225806}},"框":{"docs":{},"架":{"docs":{},"设":{"docs":{},"计":{"docs":{},"、":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"机":{"docs":{},"制":{"docs":{},"、":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"、":{"docs":{},"版":{"docs":{},"本":{"docs":{},"管":{"docs":{},"理":{"docs":{},"、":{"docs":{},"构":{"docs":{},"建":{"docs":{},"等":{"docs":{},"话":{"docs":{},"题":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}},"工":{"docs":{},"程":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}},"厂":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"源":{"docs":{},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},"和":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},"上":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"以":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"易":{"docs":{},"程":{"docs":{},"度":{"docs":{},",":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"性":{"docs":{},"。":{"docs":{},"至":{"docs":{},"于":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"自":{"docs":{},"动":{"docs":{},"性":{"docs":{},",":{"docs":{},"可":{"docs":{},"重":{"docs":{},"复":{"docs":{},"性":{"docs":{},",":{"docs":{},"非":{"docs":{},"偶":{"docs":{},"然":{"docs":{},"性":{"docs":{},",":{"docs":{},"无":{"docs":{},"序":{"docs":{},"性":{"docs":{},",":{"docs":{},"完":{"docs":{},"备":{"docs":{},"性":{"docs":{},"(":{"docs":{},"全":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},")":{"docs":{},",":{"docs":{},"轻":{"docs":{},"量":{"docs":{},"性":{"docs":{},"(":{"docs":{},"可":{"docs":{},"快":{"docs":{},"速":{"docs":{},"执":{"docs":{},"行":{"docs":{},")":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"层":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"不":{"docs":{},"包":{"docs":{},"含":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"点":{"docs":{},"都":{"docs":{},"可":{"docs":{},"被":{"docs":{},"用":{"docs":{},"户":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"所":{"docs":{},"替":{"docs":{},"换":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}},"抽":{"docs":{},"象":{"docs":{},",":{"docs":{},"它":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"扩":{"docs":{},"展":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"核":{"docs":{},"心":{"docs":{},"模":{"docs":{},"型":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"模":{"docs":{},"型":{"docs":{},"都":{"docs":{},"向":{"docs":{},"它":{"docs":{},"靠":{"docs":{},"扰":{"docs":{},",":{"docs":{},"或":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{},"它":{"docs":{},",":{"docs":{},"它":{"docs":{},"代":{"docs":{},"表":{"docs":{},"一":{"docs":{},"个":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"体":{"docs":{},",":{"docs":{},"可":{"docs":{},"向":{"docs":{},"它":{"docs":{},"发":{"docs":{},"起":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{},"中":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},",":{"docs":{},"在":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"只":{"docs":{},"使":{"docs":{},"用":{"docs":{},"这":{"docs":{},"两":{"docs":{},"层":{"docs":{},"完":{"docs":{},"成":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"其":{"docs":{},"它":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"老":{"docs":{},"病":{"docs":{},"死":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"都":{"docs":{},"自":{"docs":{},"己":{"docs":{},"做":{"docs":{},"了":{"docs":{},",":{"docs":{},"外":{"docs":{},"部":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"或":{"docs":{},"集":{"docs":{},"成":{"docs":{},"都":{"docs":{},"无":{"docs":{},"能":{"docs":{},"为":{"docs":{},"力":{"docs":{},"。":{"docs":{},"好":{"docs":{},"的":{"docs":{},"办":{"docs":{},"法":{"docs":{},"是":{"docs":{},"让":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"或":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"把":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"的":{"docs":{},"是":{"docs":{},"将":{"docs":{},"多":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"不":{"docs":{},"那":{"docs":{},"么":{"docs":{},"透":{"docs":{},"明":{"docs":{},",":{"docs":{},"不":{"docs":{},"那":{"docs":{},"么":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"像":{"docs":{},"调":{"docs":{},"本":{"docs":{},"地":{"docs":{},"服":{"docs":{},"务":{"docs":{},"一":{"docs":{},"样":{"docs":{},"调":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"方":{"docs":{},"便":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"基":{"docs":{},"类":{"docs":{},"支":{"docs":{},"持":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"下":{"docs":{},"问":{"docs":{},"题":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"协":{"docs":{},"议":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"在":{"docs":{},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"头":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"不":{"docs":{},"同":{"docs":{},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"或":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"在":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"通":{"docs":{},"讯":{"docs":{},",":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"策":{"docs":{},"等":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"都":{"docs":{},"有":{"docs":{},"多":{"docs":{},"种":{"docs":{},"可":{"docs":{},"选":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"以":{"docs":{},"应":{"docs":{},"对":{"docs":{},"不":{"docs":{},"同":{"docs":{},"应":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"而":{"docs":{},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"很":{"docs":{},"分":{"docs":{},"散":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"自":{"docs":{},"己":{"docs":{},"需":{"docs":{},"要":{"docs":{},"加":{"docs":{},"一":{"docs":{},"种":{"docs":{},"新":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"时":{"docs":{},",":{"docs":{},"总":{"docs":{},"是":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"能":{"docs":{},"否":{"docs":{},"满":{"docs":{},"足":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"完":{"docs":{},"整":{"docs":{},"契":{"docs":{},"约":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"中":{"docs":{},"要":{"docs":{},"注":{"docs":{},"入":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},",":{"docs":{},"要":{"docs":{},"用":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}},"加":{"docs":{},"载":{"docs":{},"从":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"实":{"docs":{},"现":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"类":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"支":{"docs":{},"持":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}},"人":{"docs":{},",":{"docs":{},"确":{"docs":{},"实":{"docs":{},"容":{"docs":{},"易":{"docs":{},"给":{"docs":{},"搞":{"docs":{},"混":{"docs":{},"了":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},",":{"docs":{},"却":{"docs":{},"时":{"docs":{},"而":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"标":{"docs":{},"签":{"docs":{},",":{"docs":{},"都":{"docs":{},"统":{"docs":{},"一":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"转":{"docs":{},"化":{"docs":{},"。":{"docs":{},"接":{"docs":{},"下":{"docs":{},"来":{"docs":{},"就":{"docs":{},"是":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},",":{"docs":{},"上":{"docs":{},"图":{"docs":{},"中":{"docs":{},"的":{"docs":{},"红":{"docs":{},"色":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{},"下":{"docs":{},"面":{"docs":{},"我":{"docs":{},"们":{"docs":{},"以":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"版":{"docs":{},"本":{"docs":{},"等":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"、":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}},"简":{"docs":{},"洁":{"docs":{},"性":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"微":{"docs":{},"核":{"docs":{},"是":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956}}}}},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},"转":{"docs":{},"交":{"docs":{},"给":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"代":{"docs":{},"码":{"docs":{},"原":{"docs":{},"封":{"docs":{},"不":{"docs":{},"动":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}},"地":{"docs":{},"方":{"docs":{},"无":{"docs":{},"视":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},"场":{"docs":{},"景":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"了":{"docs":{},"一":{"docs":{},"下":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"不":{"docs":{},"管":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"依":{"docs":{},"赖":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},"值":{"docs":{},"中":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"竖":{"docs":{},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"多":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"表":{"docs":{},"示":{"docs":{},"多":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},"设":{"docs":{},"置":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"可":{"docs":{},"以":{"docs":{},"设":{"docs":{},"置":{"docs":{},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{},"但":{"docs":{},"很":{"docs":{},"多":{"docs":{},"服":{"docs":{},"务":{"docs":{},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"求":{"docs":{},"每":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"都":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"是":{"docs":{},"不":{"docs":{},"现":{"docs":{},"实":{"docs":{},"的":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"项":{"docs":{},"目":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}},"任":{"docs":{},"务":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"使":{"docs":{},"用":{"docs":{},"有":{"docs":{},"限":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"资":{"docs":{},"源":{"docs":{},"耗":{"docs":{},"尽":{"docs":{},"。":{"docs":{},"当":{"docs":{},"任":{"docs":{},"务":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"时":{"docs":{},",":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"保":{"docs":{},"证":{"docs":{},"平":{"docs":{},"滑":{"docs":{},"劣":{"docs":{},"化":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"信":{"docs":{},"息":{"docs":{},"浓":{"docs":{},"度":{"docs":{},"。":{"docs":{},"日":{"docs":{},"志":{"docs":{},"过":{"docs":{},"多":{"docs":{},"、":{"docs":{},"过":{"docs":{},"于":{"docs":{},"混":{"docs":{},"乱":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"有":{"docs":{},"用":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"被":{"docs":{},"淹":{"docs":{},"没":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}},"服":{"docs":{},"务":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"方":{"docs":{},"法":{"docs":{},"签":{"docs":{},"名":{"docs":{},"为":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}},"现":{"docs":{},"有":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"能":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},"有":{"docs":{},"限":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"需":{"docs":{},"求":{"docs":{},"都":{"docs":{},"被":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}},"适":{"docs":{},"用":{"docs":{},"面":{"docs":{},",":{"docs":{},"不":{"docs":{},"想":{"docs":{},"强":{"docs":{},"依":{"docs":{},"赖":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"基":{"docs":{},"本":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"后":{"docs":{},",":{"docs":{},"进":{"docs":{},"入":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}},"给":{"docs":{},"予":{"docs":{},"时":{"docs":{},"间":{"docs":{},"保":{"docs":{},"证":{"docs":{},")":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},"为":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"长":{"docs":{},"连":{"docs":{},"接":{"docs":{},"上":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"这":{"docs":{},"篇":{"docs":{},"文":{"docs":{},"档":{"docs":{},"的":{"docs":{},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{},"是":{"docs":{},"对":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}}},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},"在":{"docs":{},"下":{"docs":{},"面":{"docs":{},"一":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"是":{"docs":{},"契":{"docs":{},"约":{"docs":{},"式":{"docs":{},"设":{"docs":{},"计":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"有":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"查":{"docs":{},"询":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"样":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"从":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"拿":{"docs":{},"到":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"己":{"docs":{},"定":{"docs":{},"好":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"后":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"从":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"上":{"docs":{},"从":{"docs":{},"最":{"docs":{},"外":{"docs":{},"层":{"docs":{},"传":{"docs":{},"入":{"docs":{},"。":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"在":{"docs":{},"配":{"docs":{},"置":{"docs":{},"传":{"docs":{},"递":{"docs":{},"上":{"docs":{},"即":{"docs":{},"是":{"docs":{},"一":{"docs":{},"条":{"docs":{},"总":{"docs":{},"线":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"减":{"docs":{},"少":{"docs":{},"后":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"可":{"docs":{},"以":{"docs":{},"冷":{"docs":{},"却":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},"里":{"docs":{},"带":{"docs":{},"来":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}},"记":{"docs":{},"录":{"docs":{},"的":{"docs":{},"是":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"的":{"docs":{},"可":{"docs":{},"测":{"docs":{},"性":{"docs":{},"主":{"docs":{},"要":{"docs":{},"指":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}},"靠":{"docs":{},"是":{"docs":{},"狭":{"docs":{},"义":{"docs":{},"的":{"docs":{},"指":{"docs":{},"是":{"docs":{},"否":{"docs":{},"会":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"或":{"docs":{},"引":{"docs":{},"起":{"docs":{},"状":{"docs":{},"态":{"docs":{},"不":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},",":{"docs":{},"写":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"讲":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"防":{"docs":{},"御":{"docs":{},",":{"docs":{},"指":{"docs":{},"的":{"docs":{},"是":{"docs":{},"对":{"docs":{},"非":{"docs":{},"必":{"docs":{},"须":{"docs":{},"途":{"docs":{},"径":{"docs":{},"上":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"进":{"docs":{},"行":{"docs":{},"最":{"docs":{},"大":{"docs":{},"限":{"docs":{},"度":{"docs":{},"的":{"docs":{},"容":{"docs":{},"忍":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"程":{"docs":{},"序":{"docs":{},"上":{"docs":{},"的":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"要":{"docs":{},"讲":{"docs":{},"一":{"docs":{},"个":{"docs":{},"事":{"docs":{},"件":{"docs":{},"和":{"docs":{},"上":{"docs":{},"面":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},",":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"是":{"docs":{},"干":{"docs":{},"预":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"过":{"docs":{},"程":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"事":{"docs":{},"件":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"状":{"docs":{},"态":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},",":{"docs":{},"任":{"docs":{},"何":{"docs":{},"行":{"docs":{},"为":{"docs":{},"改":{"docs":{},"变":{"docs":{},"的":{"docs":{},"相":{"docs":{},"同":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"对":{"docs":{},"事":{"docs":{},"件":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"一":{"docs":{},"致":{"docs":{},"的":{"docs":{},"。":{"docs":{},"事":{"docs":{},"件":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"事":{"docs":{},"后":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"列":{"docs":{},"出":{"docs":{},"一":{"docs":{},"些":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"面":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"有":{"docs":{},"部":{"docs":{},"分":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"但":{"docs":{},"并":{"docs":{},"不":{"docs":{},"能":{"docs":{},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"协":{"docs":{},"作":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"加":{"docs":{},"载":{"docs":{},"和":{"docs":{},"配":{"docs":{},"置":{"docs":{},"都":{"docs":{},"没":{"docs":{},"有":{"docs":{},"统":{"docs":{},"一":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"下":{"docs":{},"面":{"docs":{},"对":{"docs":{},"它":{"docs":{},"进":{"docs":{},"行":{"docs":{},"重":{"docs":{},"构":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"种":{"docs":{},"典":{"docs":{},"型":{"docs":{},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}},"是":{"docs":{},"我":{"docs":{},"最":{"docs":{},"不":{"docs":{},"喜":{"docs":{},"欢":{"docs":{},"看":{"docs":{},"到":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"在":{"docs":{},"核":{"docs":{},"心":{"docs":{},"框":{"docs":{},"架":{"docs":{},"中":{"docs":{},",":{"docs":{},"我":{"docs":{},"更":{"docs":{},"愿":{"docs":{},"看":{"docs":{},"到":{"docs":{},"信":{"docs":{},"息":{"docs":{},"详":{"docs":{},"细":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"不":{"docs":{},"合":{"docs":{},"法":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"这":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"健":{"docs":{},"状":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"在":{"docs":{},"写":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"都":{"docs":{},"应":{"docs":{},"在":{"docs":{},"潜":{"docs":{},"意":{"docs":{},"识":{"docs":{},"中":{"docs":{},"防":{"docs":{},"止":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"基":{"docs":{},"本":{"docs":{},"上":{"docs":{},"要":{"docs":{},"能":{"docs":{},"确":{"docs":{},"保":{"docs":{},"一":{"docs":{},"次":{"docs":{},"写":{"docs":{},"完":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"在":{"docs":{},"不":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"异":{"docs":{},"常":{"docs":{},"才":{"docs":{},"算":{"docs":{},"合":{"docs":{},"格":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"些":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"$":{"0":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"2":{"docs":{},"}":{"docs":{},"'":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"docs":{},"{":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"}":{"docs":{},"/":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}}},"docs":{}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"}":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"i":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"/":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"i":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"j":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"l":{"docs":{},"s":{"docs":{},"o":{"docs":{},"f":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"m":{"docs":{},"p":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"j":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},">":{"docs":{"build.html":{"ref":"build.html","tf":0.026785714285714284},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.026690391459074734},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"b":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.041237113402061855},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"u":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}},"g":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043},"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},",":{"docs":{},"不":{"docs":{},"小":{"docs":{},"心":{"docs":{},"改":{"docs":{},"到":{"docs":{},"了":{"docs":{},"这":{"docs":{},"里":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"引":{"docs":{},"爆":{"docs":{},"故":{"docs":{},"障":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"这":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"原":{"docs":{},"则":{"docs":{},"就":{"docs":{},"是":{"docs":{},"永":{"docs":{},"远":{"docs":{},"不":{"docs":{},"要":{"docs":{},"区":{"docs":{},"分":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"获":{"docs":{},"取":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"会":{"docs":{},"通":{"docs":{},"过":{"docs":{},"扫":{"docs":{},"描":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"或":{"docs":{},"修":{"docs":{},"改":{"docs":{},"框":{"docs":{},"架":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"从":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.04225352112676056}},",":{"docs":{},"升":{"docs":{},"级":{"docs":{},"第":{"docs":{},"三":{"docs":{},"位":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"推":{"docs":{},"广":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"版":{"docs":{},"本":{"docs":{},"。":{"docs":{},"如":{"docs":{},"何":{"docs":{},"可":{"docs":{},"行":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"推":{"docs":{},"进":{"docs":{},"应":{"docs":{},"用":{"docs":{},"在":{"docs":{},"期":{"docs":{},"望":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},"内":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{},"m":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608}}}}}}}},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},":":{"docs":{},"\\":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015350877192982455},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.022598870056497175},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},")":{"docs":{},",":{"docs":{},"就":{"docs":{},"优":{"docs":{},"先":{"docs":{},"将":{"docs":{},"它":{"docs":{},"设":{"docs":{},"计":{"docs":{},"成":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},"。":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},"有":{"docs":{},"天":{"docs":{},"然":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"共":{"docs":{},"享":{"docs":{},"优":{"docs":{},"势":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"同":{"docs":{},"步":{"docs":{},"或":{"docs":{},"复":{"docs":{},"制":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"效":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"分":{"docs":{},"析":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{},"就":{"docs":{},"算":{"docs":{},"是":{"docs":{},"可":{"docs":{},"变":{"docs":{},"类":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"从":{"docs":{},"构":{"docs":{},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"在":{"docs":{},"类":{"docs":{},"中":{"docs":{},"持":{"docs":{},"有":{"docs":{},"时":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"将":{"docs":{},"字":{"docs":{},"段":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.03260869565217391},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.030927835051546393}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.020958083832335328},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}}}},"s":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814}}}}}}}}}},"g":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}},"i":{"docs":{},"n":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}},"(":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}},"d":{"docs":{},"u":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"'":{"docs":{},".":{"docs":{},"'":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}}}}}}}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"(":{"docs":{},"正":{"docs":{},"常":{"docs":{},"流":{"docs":{},"程":{"docs":{},"/":{"docs":{},"异":{"docs":{},"常":{"docs":{},"流":{"docs":{},"程":{"docs":{},")":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576}}},"y":{"docs":{},";":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333}},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"2":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}},"docs":{}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},".":{"docs":{},"j":{"docs":{},"d":{"docs":{},"k":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}}},"y":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"c":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"x":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357}}},"y":{"docs":{},";":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},".":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}},"p":{"docs":{},"c":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}},".":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"r":{"docs":{},"o":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716}}},"y":{"docs":{},";":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}},";":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"#":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}},"}":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"#":{"docs":{},"l":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},"}":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"y":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},".":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"r":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882}}},"y":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223}}}}}}},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}},"a":{"docs":{},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.011976047904191617}}}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.16666666666666666}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015350877192982455}},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"(":{"docs":{},"造":{"docs":{},"车":{"docs":{},"者":{"docs":{},")":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},")":{"docs":{},",":{"docs":{},"而":{"docs":{},"如":{"docs":{},"果":{"docs":{},"它":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"主":{"docs":{},"流":{"docs":{},"程":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"看":{"docs":{},"到":{"docs":{},"的":{"docs":{},"。":{"docs":{},"但":{"docs":{},"这":{"docs":{},"里":{"docs":{},"要":{"docs":{},"控":{"docs":{},"制":{"docs":{},"个":{"docs":{},"度":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"随":{"docs":{},"意":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"更":{"docs":{},"不":{"docs":{},"要":{"docs":{},"无":{"docs":{},"声":{"docs":{},"无":{"docs":{},"息":{"docs":{},"的":{"docs":{},"吃":{"docs":{},"掉":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"d":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.028469750889679714}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.026785714285714284}},"e":{"docs":{},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.03202846975088968}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"design.html":{"ref":"design.html","tf":0.005988023952095809},"implementation.html":{"ref":"implementation.html","tf":0.023376623376623377},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"由":{"docs":{},"框":{"docs":{},"架":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"传":{"docs":{},"入":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"心":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"幂":{"docs":{},"等":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"两":{"docs":{},"次":{"docs":{},",":{"docs":{},"和":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"一":{"docs":{},"次":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}},",":{"docs":{},"此":{"docs":{},"处":{"docs":{},"用":{"docs":{},"于":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.011976047904191617},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}}}}}}}},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015350877192982455},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"d":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"o":{"docs":{},"r":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},",":{"docs":{},"那":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"接":{"docs":{},"口":{"docs":{},"通":{"docs":{},"常":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},",":{"docs":{},"原":{"docs":{},"理":{"docs":{},"一":{"docs":{},"样":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"可":{"docs":{},"以":{"docs":{},"任":{"docs":{},"意":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"只":{"docs":{},"是":{"docs":{},"举":{"docs":{},"例":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.015151515151515152},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.030927835051546393}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"y":{"docs":{},"m":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},",":{"docs":{},"集":{"docs":{},"成":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"e":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"e":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.03125}},"{":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"b":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"e":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}},"i":{"docs":{},"c":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"c":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"a":{"docs":{"release.html":{"ref":"release.html","tf":0.14084507042253522}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856}},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"y":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"b":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"/":{"1":{"0":{"4":{"1":{"8":{"3":{"2":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"6":{"6":{"6":{"4":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"9":{"0":{"8":{"4":{"5":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"0":{"6":{"0":{"9":{"8":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"0":{"4":{"1":{"8":{"7":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"4":{"9":{"5":{"2":{"7":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"e":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"3":{"8":{"0":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"/":{"docs":{},"r":{"docs":{},"o":{"docs":{},"b":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}}}}},"s":{"docs":{},"h":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"基":{"docs":{},"于":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"`":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856},"SPI.html":{"ref":"SPI.html","tf":0.010964912280701754},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.01694915254237288},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"v":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"coding.html":{"ref":"coding.html","tf":0.015151515151515152},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.01694915254237288},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{"coding.html":{"ref":"coding.html","tf":0.015151515151515152}}}}},"e":{"docs":{},"y":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":0.25}}}},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"b":{"docs":{},"c":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"r":{"docs":{},"u":{"docs":{},"b":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"这":{"docs":{},"就":{"docs":{},"是":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"r":{"1":{"4":{"0":{"docs":{},"&":{"docs":{},"s":{"docs":{},"l":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"docs":{}},"8":{"1":{"docs":{},"&":{"docs":{},"c":{"docs":{},"x":{"docs":{},"f":{"docs":{},"(":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"3":{"1":{"1":{"docs":{},"&":{"docs":{},"j":{"docs":{},"s":{"docs":{},"r":{"3":{"3":{"9":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}},"docs":{}},"docs":{}},"docs":{}}},"v":{"docs":{},"m":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"c":{"docs":{},"r":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"r":{"2":{"8":{"3":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"m":{"docs":{},"s":{"docs":{},"&":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"m":{"docs":{},"q":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}},"x":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"x":{"docs":{},"a":{"docs":{},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{},"事":{"docs":{},"务":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"a":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}},"m":{"2":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}},"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.044642857142857144},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"_":{"docs":{},"o":{"docs":{},"p":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},"s":{"docs":{},"=":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"k":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"p":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"认":{"docs":{},"为":{"docs":{},"是":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"写":{"docs":{},"入":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"等":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"认":{"docs":{},"为":{"docs":{},"是":{"docs":{},"不":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"的":{"docs":{},"。":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"必":{"docs":{},"须":{"docs":{},"在":{"docs":{},"写":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},",":{"docs":{},"都":{"docs":{},"注":{"docs":{},"意":{"docs":{},"它":{"docs":{},"的":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"性":{"docs":{},"与":{"docs":{},"否":{"docs":{},",":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"划":{"docs":{},"分":{"docs":{},"开":{"docs":{},",":{"docs":{},"并":{"docs":{},"对":{"docs":{},"失":{"docs":{},"败":{"docs":{},"做":{"docs":{},"异":{"docs":{},"常":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"并":{"docs":{},"为":{"docs":{},"容":{"docs":{},"错":{"docs":{},",":{"docs":{},"自":{"docs":{},"我":{"docs":{},"保":{"docs":{},"护":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"或":{"docs":{},"切":{"docs":{},"换":{"docs":{},"等":{"docs":{},"补":{"docs":{},"偿":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"提":{"docs":{},"供":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"切":{"docs":{},"入":{"docs":{},"点":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"后":{"docs":{},"续":{"docs":{},"增":{"docs":{},"加":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"至":{"docs":{},"于":{"docs":{},"放":{"docs":{},"错":{"docs":{},"位":{"docs":{},"置":{"docs":{},",":{"docs":{},"而":{"docs":{},"导":{"docs":{},"致":{"docs":{},"原":{"docs":{},"先":{"docs":{},"的":{"docs":{},"容":{"docs":{},"错":{"docs":{},"处":{"docs":{},"理":{"docs":{},"陷":{"docs":{},"入":{"docs":{},"混":{"docs":{},"乱":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"docs":{}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}},"v":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.05357142857142857}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"e":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}},"t":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"t":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"n":{"docs":{},"a":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.017964071856287425},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.046875}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"s":{"docs":{},"g":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"k":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"(":{"docs":{},"[":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"t":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.08695652173913043}}}}}}},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.017964071856287425},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.02512562814070352},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}}}},"x":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.014970059880239521},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"代":{"docs":{},"码":{"docs":{},"通":{"docs":{},"过":{"docs":{},"这":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.022598870056497175}}},"y":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"h":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.008896797153024912}}}}}}},"l":{"docs":{},"u":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"t":{"docs":{},"s":{"2":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"docs":{}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"u":{"docs":{},"s":{"docs":{},"。":{"docs":{},"通":{"docs":{},"常":{"docs":{},"核":{"docs":{},"心":{"docs":{},"是":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"带":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"性":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"和":{"docs":{},"集":{"docs":{},"成":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"各":{"docs":{},"功":{"docs":{},"能":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"交":{"docs":{},"互":{"docs":{},"及":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"任":{"docs":{},"何":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"替":{"docs":{},"换":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"做":{"docs":{},"不":{"docs":{},"到":{"docs":{},"微":{"docs":{},"核":{"docs":{},",":{"docs":{},"至":{"docs":{},"少":{"docs":{},"要":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},",":{"docs":{},"即":{"docs":{},"原":{"docs":{},"作":{"docs":{},"者":{"docs":{},"能":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"应":{"docs":{},"该":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"全":{"docs":{},"部":{"docs":{},"做":{"docs":{},"到":{"docs":{},"。":{"docs":{},"原":{"docs":{},"作":{"docs":{},"者":{"docs":{},"要":{"docs":{},"把":{"docs":{},"自":{"docs":{},"己":{"docs":{},"也":{"docs":{},"当":{"docs":{},"作":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"才":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"可":{"docs":{},"持":{"docs":{},"续":{"docs":{},"性":{"docs":{},"及":{"docs":{},"由":{"docs":{},"内":{"docs":{},"向":{"docs":{},"外":{"docs":{},"的":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.039473684210526314},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.034220532319391636},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.03125},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.05025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.042735042735042736},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.04411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.057692307692307696},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05747126436781609},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05555555555555555},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}}},"s":{"docs":{},"h":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"t":{"docs":{},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}},"s":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"o":{"docs":{},"j":{"docs":{},"o":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"i":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"\\":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"\\":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}},"docs":{}}}}}}}},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"a":{"docs":{},"g":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},",":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},">":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"k":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.6666666666666665},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.021739130434782608},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.05084745762711865},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"编":{"docs":{},"程":{"docs":{},"接":{"docs":{},"口":{"docs":{},"做":{"docs":{},"了":{"docs":{},"配":{"docs":{},"套":{"docs":{},"方":{"docs":{},"案":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"t":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"u":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.04225352112676056},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}},"e":{"docs":{},"d":{"docs":{},"!":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"u":{"docs":{},"b":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"选":{"docs":{},"用":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"保":{"docs":{},"持":{"docs":{},"原":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"不":{"docs":{},"变":{"docs":{},",":{"docs":{},"增":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"o":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588}}}}},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"简":{"docs":{},"化":{"docs":{},"后":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"它":{"docs":{},"的":{"docs":{},"缺":{"docs":{},"点":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"强":{"docs":{},"依":{"docs":{},"赖":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}},"a":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"y":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"r":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"u":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"b":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"l":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"_":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},"_":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"_":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}},"n":{"docs":{},"m":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"v":{"docs":{},"n":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},",":{"docs":{},"隐":{"docs":{},"藏":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"d":{"docs":{},"p":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"d":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"r":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.03636363636363636},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.019011406844106463},"impls/registry.html":{"ref":"impls/registry.html","tf":0.019943019943019943},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"contract.html":{"ref":"contract.html","tf":0.14285714285714285},"coding.html":{"ref":"coding.html","tf":0.03787878787878788},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"code-smell.html":{"ref":"code-smell.html","tf":0.018867924528301886}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008547008547008548},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"先":{"docs":{},"注":{"docs":{},"册":{"docs":{},"到":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"如":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"但":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"全":{"docs":{},"部":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"用":{"docs":{},"\"":{"docs":{},".":{"docs":{},"\"":{"docs":{},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"p":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}},"e":{"docs":{},"b":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806}},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"类":{"docs":{},"内":{"docs":{},"容":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"a":{"docs":{},"r":{"docs":{},"n":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.020618556701030927}}}},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}}},"x":{"docs":{},"m":{"docs":{},"x":{"1":{"0":{"2":{"4":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.01694915254237288},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"x":{"docs":{},":":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"=":{"5":{"1":{"2":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}},"x":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"(":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},",":{"docs":{},"a":{"docs":{},"a":{"docs":{},"a":{"docs":{},",":{"docs":{},"b":{"docs":{},"b":{"docs":{},"b":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"基":{"docs":{},"类":{"docs":{},"都":{"docs":{},"命":{"docs":{},"名":{"docs":{},"为":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}},"↩":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856},"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"coding.html":{"ref":"coding.html","tf":0.022727272727272728}}},"上":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"浏":{"docs":{},"览":{"docs":{},"源":{"docs":{},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}},"图":{"docs":{},"是":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},"消":{"docs":{},"费":{"docs":{},"的":{"docs":{},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"面":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"这":{"docs":{},"个":{"docs":{},"类":{"docs":{},"会":{"docs":{},"被":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"不":{"docs":{},"自":{"docs":{},"觉":{"docs":{},"的":{"docs":{},"就":{"docs":{},"将":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}},"发":{"docs":{},"表":{"docs":{},"的":{"docs":{},"系":{"docs":{},"列":{"docs":{},"文":{"docs":{},"章":{"docs":{},"。":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":0.25}}}}}}}}}},"一":{"docs":{},"点":{"docs":{},"的":{"docs":{},"子":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}},"找":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"下":{"docs":{},"的":{"docs":{},"路":{"docs":{},"径":{"docs":{},"是":{"docs":{"build.html":{"ref":"build.html","tf":0.017857142857142856}}}}}},"面":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"我":{"docs":{},"们":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"精":{"docs":{},"简":{"docs":{},"的":{"docs":{},"图":{"docs":{},"来":{"docs":{},"说":{"docs":{},"明":{"docs":{},"最":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"两":{"docs":{},"种":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{},"该":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"很":{"docs":{},"多":{"docs":{},"项":{"docs":{},"目":{"docs":{},"也":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"似":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"s":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"接":{"docs":{},"口":{"docs":{},"类":{"docs":{},"全":{"docs":{},"名":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},"每":{"docs":{},"行":{"docs":{},"一":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"类":{"docs":{},"名":{"docs":{},",":{"docs":{},"就":{"docs":{},"像":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"约":{"docs":{},"定":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"项":{"docs":{},"目":{"docs":{},"中":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"取":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"加":{"docs":{},"载":{"docs":{},"的":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"不":{"docs":{},"被":{"docs":{},"这":{"docs":{},"么":{"docs":{},"低":{"docs":{},"级":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"折":{"docs":{},"腾":{"docs":{},",":{"docs":{},"和":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"在":{"docs":{},"配":{"docs":{},"置":{"docs":{},"加":{"docs":{},"载":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"约":{"docs":{},"定":{"docs":{},"一":{"docs":{},"个":{"docs":{},"以":{"docs":{},"项":{"docs":{},"目":{"docs":{},"为":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"中":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"导":{"docs":{},"入":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}},"配":{"docs":{},"置":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"新":{"docs":{},"加":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"是":{"docs":{},"丢":{"docs":{},"弃":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"等":{"docs":{},"待":{"docs":{},"结":{"docs":{},"果":{"docs":{},"也":{"docs":{},"只":{"docs":{},"是":{"docs":{},"请":{"docs":{},"求":{"docs":{},"的":{"docs":{},"超":{"docs":{},"时":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}},"此":{"docs":{},"处":{"docs":{},"实":{"docs":{},"现":{"docs":{},"需":{"docs":{},"要":{"docs":{},"进":{"docs":{},"行":{"docs":{},"改":{"docs":{},"造":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"的":{"docs":{},"任":{"docs":{},"何":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"加":{"docs":{},"密":{"docs":{},"算":{"docs":{},"法":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"引":{"docs":{},"擎":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"新":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"(":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"是":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},")":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"碰":{"docs":{},"撞":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"共":{"docs":{},"享":{"docs":{},"连":{"docs":{},"接":{"docs":{},"是":{"docs":{},"说":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"发":{"docs":{},"送":{"docs":{},"远":{"docs":{},"程":{"docs":{},"请":{"docs":{},"求":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}},"途":{"docs":{},"变":{"docs":{},"更":{"docs":{},"时":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"分":{"docs":{},"开":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"上":{"docs":{},"一":{"docs":{},"个":{"docs":{},"全":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}},"入":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"碰":{"docs":{},"到":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},":":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"取":{"docs":{},"得":{"docs":{},"回":{"docs":{},"调":{"docs":{},"服":{"docs":{},"务":{"docs":{},"实":{"docs":{},"例":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"此":{"docs":{},"处":{"docs":{},"需":{"docs":{},"要":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"将":{"docs":{},"此":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"与":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"支":{"docs":{},"持":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"设":{"docs":{},"定":{"docs":{},"的":{"docs":{},"值":{"docs":{},")":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"[":{"docs":{},"]":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"在":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}},"通":{"docs":{},"过":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"则":{"docs":{},"会":{"docs":{},"注":{"docs":{},"入":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"代":{"docs":{},"表":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"行":{"docs":{},"为":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"上":{"docs":{},"一":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"复":{"docs":{},"用":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"等":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"需":{"docs":{},"为":{"docs":{},"传":{"docs":{},"输":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"头":{"docs":{},"解":{"docs":{},"析":{"docs":{},",":{"docs":{},"数":{"docs":{},"据":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},",":{"docs":{},"都":{"docs":{},"留":{"docs":{},"出":{"docs":{},"不":{"docs":{},"同":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"仓":{"docs":{},"库":{"docs":{},"。":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},"通":{"docs":{},"过":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}},"代":{"docs":{},"码":{"docs":{},"签":{"docs":{},"出":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"动":{"docs":{},"态":{"docs":{},"生":{"docs":{},"成":{"docs":{},"字":{"docs":{},"节":{"docs":{},"码":{"docs":{},",":{"docs":{},"加":{"docs":{},"速":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"注":{"docs":{},"释":{"docs":{},"写":{"docs":{},"清":{"docs":{},"楚":{"docs":{},",":{"docs":{},"用":{"docs":{},"中":{"docs":{},"文":{"docs":{},"无":{"docs":{},"妨":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}},"表":{"docs":{},"层":{"docs":{},"或":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"的":{"docs":{},"表":{"docs":{},"示":{"docs":{},"与":{"docs":{},"业":{"docs":{},"务":{"docs":{},"有":{"docs":{},"交":{"docs":{},"互":{"docs":{},",":{"docs":{},"绿":{"docs":{},"色":{"docs":{},"的":{"docs":{},"表":{"docs":{},"示":{"docs":{},"只":{"docs":{},"对":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"署":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"拓":{"docs":{},"扑":{"docs":{},"节":{"docs":{},"点":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"理":{"docs":{},"了":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"替":{"docs":{},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"上":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}},"内":{"docs":{},"容":{"docs":{},"都":{"docs":{},"写":{"docs":{},"到":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"的":{"docs":{},"评":{"docs":{},"论":{"docs":{},"上":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"不":{"docs":{},"停":{"docs":{},"的":{"docs":{},"解":{"docs":{},"析":{"docs":{},"和":{"docs":{},"拼":{"docs":{},"装":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"户":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"运":{"docs":{},"行":{"docs":{},"一":{"docs":{},"下":{"docs":{},"功":{"docs":{},"能":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}},"作":{"docs":{},"为":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"主":{"docs":{},"干":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"分":{"docs":{},"支":{"docs":{},"作":{"docs":{},"为":{"docs":{},"维":{"docs":{},"护":{"docs":{},"版":{"docs":{},"本":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{},"工":{"docs":{},"具":{"docs":{},"。":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"统":{"docs":{},"一":{"docs":{},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"都":{"docs":{},"通":{"docs":{},"过":{"docs":{},"传":{"docs":{},"递":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},"贯":{"docs":{},"穿":{"docs":{},"整":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"设":{"docs":{},"计":{"docs":{},"体":{"docs":{},"系":{"docs":{},"。":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}}}},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"、":{"docs":{},"调":{"docs":{},"用":{"docs":{},"和":{"docs":{},"治":{"docs":{},"理":{"docs":{},"的":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"案":{"docs":{},",":{"docs":{},"是":{"docs":{},"应":{"docs":{},"用":{"docs":{},"运":{"docs":{},"转":{"docs":{},"的":{"docs":{},"经":{"docs":{},"络":{"docs":{},",":{"docs":{},"其":{"docs":{},"本":{"docs":{},"身":{"docs":{},"实":{"docs":{},"现":{"docs":{},"健":{"docs":{},"壮":{"docs":{},"性":{"docs":{},"的":{"docs":{},"重":{"docs":{},"要":{"docs":{},"程":{"docs":{},"度":{"docs":{},"是":{"docs":{},"不":{"docs":{},"言":{"docs":{},"而":{"docs":{},"喻":{"docs":{},"的":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}},"使":{"docs":{},"用":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"以":{"docs":{},"下":{"docs":{},"命":{"docs":{},"令":{"docs":{},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}},"来":{"docs":{},"生":{"docs":{},"成":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"接":{"docs":{},"口":{"docs":{},"和":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"一":{"docs":{},"致":{"docs":{},"模":{"docs":{},"型":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"如":{"docs":{},"下":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"开":{"docs":{},"发":{"docs":{},"模":{"docs":{},"式":{"docs":{},"来":{"docs":{},"保":{"docs":{},"障":{"docs":{},"两":{"docs":{},"者":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"该":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"参":{"docs":{},"数":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"属":{"docs":{},"性":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"分":{"docs":{},"支":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}},"布":{"docs":{},"式":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"后":{"docs":{},"续":{"docs":{},"如":{"docs":{},"果":{"docs":{},"维":{"docs":{},"护":{"docs":{},"人":{"docs":{},"员":{"docs":{},"增":{"docs":{},"多":{"docs":{},"或":{"docs":{},"变":{"docs":{},"更":{"docs":{},",":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"质":{"docs":{},"量":{"docs":{},"的":{"docs":{},"下":{"docs":{},"降":{"docs":{},",":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"离":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"可":{"docs":{},"靠":{"docs":{},"操":{"docs":{},"作":{"docs":{},"和":{"docs":{},"不":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"操":{"docs":{},"作":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}},"钟":{"docs":{},"、":{"docs":{},"第":{"docs":{},"三":{"docs":{},"次":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}},",":{"docs":{},"把":{"docs":{},"重":{"docs":{},"连":{"docs":{},"分":{"docs":{},"散":{"docs":{},"开":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}},"第":{"docs":{},"二":{"docs":{},"次":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"解":{"docs":{},"成":{"docs":{},"两":{"docs":{},"个":{"docs":{},"层":{"docs":{},"次":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"类":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"包":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},",":{"docs":{},"方":{"docs":{},"便":{"docs":{},"用":{"docs":{},"来":{"docs":{},"调":{"docs":{},"试":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}},"内":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"这":{"docs":{},"个":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"进":{"docs":{},"行":{"docs":{},"合":{"docs":{},"并":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"文":{"docs":{},"本":{"docs":{},"文":{"docs":{},"件":{"docs":{},":":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"不":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"括":{"docs":{},"监":{"docs":{},"控":{"docs":{},"在":{"docs":{},"内":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"附":{"docs":{},"加":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"全":{"docs":{},"部":{"docs":{},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"名":{"docs":{},"称":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"是":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"性":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"代":{"docs":{},"码":{"docs":{},"却":{"docs":{},"不":{"docs":{},"少":{"docs":{},",":{"docs":{},"初":{"docs":{},"步":{"docs":{},"测":{"docs":{},"试":{"docs":{},"也":{"docs":{},"没":{"docs":{},"啥":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"但":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"整":{"docs":{},"个":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"放":{"docs":{},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"定":{"docs":{},"文":{"docs":{},"件":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"放":{"docs":{},"置":{"docs":{},"名":{"docs":{},"为":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"中":{"docs":{},"挑":{"docs":{},"一":{"docs":{},"个":{"docs":{},"一":{"docs":{},"定":{"docs":{},"会":{"docs":{},"加":{"docs":{},"载":{"docs":{},"的":{"docs":{},"类":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{},"重":{"docs":{},"复":{"docs":{},"类":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"给":{"docs":{},"个":{"docs":{},"示":{"docs":{},"例":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},"指":{"docs":{},"向":{"docs":{},"本":{"docs":{},"地":{"docs":{},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}},"更":{"docs":{},"事":{"docs":{},"件":{"docs":{},"监":{"docs":{},"听":{"docs":{},"器":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{},"构":{"docs":{},"建":{"docs":{},"命":{"docs":{},"令":{"docs":{},"来":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"面":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},":":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}},"能":{"docs":{},"存":{"docs":{},"在":{"docs":{},"未":{"docs":{},"知":{"docs":{},"特":{"docs":{},"定":{"docs":{},"场":{"docs":{},"景":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"或":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"误":{"docs":{},"修":{"docs":{},"改":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"(":{"docs":{},"但":{"docs":{},"一":{"docs":{},"般":{"docs":{},"人":{"docs":{},"员":{"docs":{},"不":{"docs":{},"会":{"docs":{},"去":{"docs":{},"掉":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"业":{"docs":{},"务":{"docs":{},"方":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}},"配":{"docs":{},"置":{"docs":{},"一":{"docs":{},"定":{"docs":{},"可":{"docs":{},"编":{"docs":{},"程":{"docs":{},",":{"docs":{},"并":{"docs":{},"保":{"docs":{},"持":{"docs":{},"友":{"docs":{},"好":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},"编":{"docs":{},"程":{"docs":{},"配":{"docs":{},"置":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}},"命":{"docs":{},"令":{"docs":{},"配":{"docs":{},"置":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}},"扩":{"docs":{},"展":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":3.345098039215686}}}},"和":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}},"在":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428},"design.html":{"ref":"design.html","tf":0.005988023952095809},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464},"release.html":{"ref":"release.html","tf":0.014084507042253521},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"很":{"docs":{},"多":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"都":{"docs":{},"使":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"加":{"docs":{},"载":{"docs":{},"到":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"有":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"构":{"docs":{},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"则":{"docs":{},"判":{"docs":{},"定":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"上":{"docs":{},"添":{"docs":{},"加":{"docs":{},"了":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"类":{"docs":{},"似":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"类":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"调":{"docs":{},"用":{"docs":{},"该":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"发":{"docs":{},"现":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"册":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"连":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"遇":{"docs":{},"到":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"缺":{"docs":{},"省":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018}}}},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},"上":{"docs":{},"设":{"docs":{},"置":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"启":{"docs":{},"前":{"docs":{},",":{"docs":{},"先":{"docs":{},"手":{"docs":{},"工":{"docs":{},"将":{"docs":{},"出":{"docs":{},"错":{"docs":{},"现":{"docs":{},"场":{"docs":{},"所":{"docs":{},"有":{"docs":{},"数":{"docs":{},"据":{"docs":{},"备":{"docs":{},"份":{"docs":{},"一":{"docs":{},"下":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"最":{"docs":{},"好":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"搜":{"docs":{},"文":{"docs":{},"件":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"给":{"docs":{},"应":{"docs":{},"用":{"docs":{},"排":{"docs":{},"错":{"docs":{},"时":{"docs":{},",":{"docs":{},"最":{"docs":{},"怕":{"docs":{},"的":{"docs":{},"就":{"docs":{},"是":{"docs":{},"那":{"docs":{},"种":{"docs":{},"只":{"docs":{},"有":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"一":{"docs":{},"句":{"docs":{},"错":{"docs":{},"误":{"docs":{},"描":{"docs":{},"述":{"docs":{},",":{"docs":{},"啥":{"docs":{},"信":{"docs":{},"息":{"docs":{},"都":{"docs":{},"没":{"docs":{},"有":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"上":{"docs":{},"次":{"docs":{},"碰":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"根":{"docs":{},"据":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"定":{"docs":{},"义":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}},"期":{"docs":{},"升":{"docs":{},"级":{"docs":{},"版":{"docs":{},"本":{"docs":{},"用":{"docs":{},"户":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"不":{"docs":{},"安":{"docs":{},"。":{"docs":{},"这":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"假":{"docs":{},"命":{"docs":{},"题":{"docs":{},",":{"docs":{},"说":{"docs":{},"明":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"使":{"docs":{},"用":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"产":{"docs":{},"品":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"产":{"docs":{},"品":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"也":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},"。":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"产":{"docs":{},"品":{"docs":{},"为":{"docs":{},"了":{"docs":{},"适":{"docs":{},"应":{"docs":{},"各":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"想":{"docs":{},",":{"docs":{},"有":{"docs":{},"没":{"docs":{},"有":{"docs":{},"什":{"docs":{},"么":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"大":{"docs":{},"家":{"docs":{},"共":{"docs":{},"同":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"的":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"平":{"docs":{},"时":{"docs":{},"写":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"的":{"docs":{},"一":{"docs":{},"习":{"docs":{},"惯":{"docs":{},",":{"docs":{},"总":{"docs":{},"结":{"docs":{},"了":{"docs":{},"一":{"docs":{},"下":{"docs":{},"在":{"docs":{},"写":{"docs":{},"代":{"docs":{},"码":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"是":{"docs":{},"框":{"docs":{},"架":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"要":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"牢":{"docs":{},"记":{"docs":{},"的":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{},"可":{"docs":{},"能":{"docs":{},"下":{"docs":{},"面":{"docs":{},"要":{"docs":{},"讲":{"docs":{},"的":{"docs":{},"这":{"docs":{},"些":{"docs":{},",":{"docs":{},"大":{"docs":{},"家":{"docs":{},"都":{"docs":{},"会":{"docs":{},"觉":{"docs":{},"得":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"很":{"docs":{},"基":{"docs":{},"础":{"docs":{},",":{"docs":{},"但":{"docs":{},"要":{"docs":{},"做":{"docs":{},"到":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"牢":{"docs":{},"记":{"docs":{},"。":{"docs":{},"在":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"都":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"这":{"docs":{},"些":{"docs":{},"因":{"docs":{},"素":{"docs":{},",":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"很":{"docs":{},"大":{"docs":{},"耐":{"docs":{},"心":{"docs":{},"的":{"docs":{},",":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"或":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.021739130434782608}},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"以":{"docs":{},"上":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}},"去":{"docs":{},"掉":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}},"把":{"docs":{},"平":{"docs":{},"时":{"docs":{},"支":{"docs":{},"持":{"docs":{},"应":{"docs":{},"用":{"docs":{},"时":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"及":{"docs":{},"解":{"docs":{},"决":{"docs":{},"办":{"docs":{},"法":{"docs":{},"都":{"docs":{},"写":{"docs":{},"到":{"docs":{},"异":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"里":{"docs":{},"。":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},"其":{"docs":{},"它":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"也":{"docs":{},"转":{"docs":{},"成":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"备":{"docs":{},"选":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"集":{"docs":{},"群":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"本":{"docs":{},"地":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"文":{"docs":{},"件":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"6":{"0":{"0":{"0":{"0":{"docs":{},"会":{"docs":{},"话":{"docs":{},"超":{"docs":{},"时":{"docs":{},"或":{"docs":{},"过":{"docs":{},"期":{"docs":{},"设":{"docs":{},"置":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"=":{"1":{"0":{"0":{"0":{"docs":{},"请":{"docs":{},"求":{"docs":{},"超":{"docs":{},"时":{"docs":{},"设":{"docs":{},"置":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"上":{"docs":{},"的":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"权":{"docs":{},"限":{"docs":{},"认":{"docs":{},"证":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"通":{"docs":{},"过":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"来":{"docs":{},"查":{"docs":{},"看":{"docs":{},"所":{"docs":{},"有":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"标":{"docs":{},"签":{"docs":{},"。":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}},"决":{"docs":{},"定":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"源":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"实":{"docs":{},"现":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}},"之":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"配":{"docs":{},"置":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}},"源":{"docs":{},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}},"要":{"docs":{},"求":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"何":{"docs":{},"决":{"docs":{},"定":{"docs":{},"要":{"docs":{},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"在":{"docs":{},"这":{"docs":{},"个":{"docs":{},"示":{"docs":{},"例":{"docs":{},"中":{"docs":{},",":{"docs":{},"即":{"docs":{},"是":{"docs":{},"在":{"docs":{},"多":{"docs":{},"个":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"效":{"docs":{},"利":{"docs":{},"用":{"docs":{},"这":{"docs":{},"个":{"docs":{},"工":{"docs":{},"具":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"以":{"docs":{},"下":{"docs":{},"命":{"docs":{},"令":{"docs":{},"以":{"docs":{},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}},"的":{"docs":{},"这":{"docs":{},"个":{"docs":{},"命":{"docs":{},"令":{"docs":{},"签":{"docs":{},"出":{"docs":{},"最":{"docs":{},"新":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"源":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}}}}}}}}}}}}}}},"扫":{"docs":{},"描":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"知":{"docs":{},"者":{"docs":{},"(":{"docs":{},"即":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"实":{"docs":{},"现":{"docs":{},")":{"docs":{},"需":{"docs":{},"保":{"docs":{},"证":{"docs":{},"通":{"docs":{},"知":{"docs":{},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"单":{"docs":{},"线":{"docs":{},"程":{"docs":{},"推":{"docs":{},"送":{"docs":{},",":{"docs":{},"队":{"docs":{},"列":{"docs":{},"串":{"docs":{},"行":{"docs":{},"化":{"docs":{},",":{"docs":{},"带":{"docs":{},"版":{"docs":{},"本":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},"服":{"docs":{},"务":{"docs":{},"地":{"docs":{},"址":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"道":{"docs":{},"信":{"docs":{},"息":{"docs":{},"派":{"docs":{},"发":{"docs":{},"器":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"指":{"docs":{},"定":{"docs":{},"线":{"docs":{},"程":{"docs":{},"池":{"docs":{},"模":{"docs":{},"型":{"docs":{},"。":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"环":{"docs":{},"境":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},"都":{"docs":{},"会":{"docs":{},"采":{"docs":{},"用":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"首":{"docs":{},"先":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{"build.html":{"ref":"build.html","tf":0.008928571428571428}}}}},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},"是":{"docs":{},"有":{"docs":{},"多":{"docs":{},"种":{"docs":{},"的":{"docs":{},",":{"docs":{},"大":{"docs":{},"致":{"docs":{},"可":{"docs":{},"以":{"docs":{},"分":{"docs":{},"为":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}},"查":{"docs":{},"找":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"m":{"docs":{},"f":{"docs":{},"规":{"docs":{},"范":{"docs":{},"中":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}},"+":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.017793594306049824}},"%":{"docs":{},"y":{"docs":{},"%":{"docs":{},"m":{"docs":{},"%":{"docs":{},"d":{"docs":{},"%":{"docs":{},"h":{"docs":{},"%":{"docs":{},"m":{"docs":{},"%":{"docs":{},"s":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"+":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.021739130434782608}},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"各":{"docs":{},"层":{"docs":{},"均":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"用":{"docs":{},"户":{"docs":{},"通":{"docs":{},"过":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}}}}},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"?":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"&":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"&":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"coding.html":{"ref":"coding.html","tf":0.03787878787878788}},",":{"docs":{},"即":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"r":{"docs":{},"g":{"1":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"2":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"s":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},",":{"docs":{},"后":{"docs":{},"来":{"docs":{},",":{"docs":{},"有":{"docs":{},"了":{"docs":{},"无":{"docs":{},"接":{"docs":{},"口":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"方":{"docs":{},"法":{"docs":{},"也":{"docs":{},"能":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"并":{"docs":{},"将":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"管":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{},"无":{"docs":{},"接":{"docs":{},"口":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"都":{"docs":{},"得":{"docs":{},"把":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.03260869565217391}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"里":{"docs":{},"面":{"docs":{},"有":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"v":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"n":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"v":{"docs":{},"r":{"docs":{},"o":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"t":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"f":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"i":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.019572953736654804}},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/filter.html":{"ref":"impls/filter.html","tf":0.06504065040650407},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},"\"":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.008896797153024912}},",":{"docs":{},"以":{"docs":{},"免":{"docs":{},"被":{"docs":{},"中":{"docs":{},"途":{"docs":{},"误":{"docs":{},"修":{"docs":{},"改":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{},"不":{"docs":{},"要":{"docs":{},"以":{"docs":{},"为":{"docs":{},"这":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"是":{"docs":{},"私":{"docs":{},"有":{"docs":{},"的":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"类":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"都":{"docs":{},"是":{"docs":{},"我":{"docs":{},"自":{"docs":{},"己":{"docs":{},"写":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"对":{"docs":{},"这":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"重":{"docs":{},"新":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"。":{"docs":{},"要":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"因":{"docs":{},"素":{"docs":{},"是":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"能":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"人":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"他":{"docs":{},"不":{"docs":{},"知":{"docs":{},"道":{"docs":{},"你":{"docs":{},"的":{"docs":{},"这":{"docs":{},"个":{"docs":{},"弱":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"o":{"docs":{},"o":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{},"剔":{"docs":{},"除":{"docs":{},"添":{"docs":{},"加":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}},"docs":{}},"r":{"docs":{},"k":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"e":{"docs":{},"d":{"docs":{},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}}},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"y":{"docs":{},"、":{"docs":{},"i":{"docs":{},"o":{"docs":{},"c":{"docs":{},"、":{"docs":{},"o":{"docs":{},"s":{"docs":{},"g":{"docs":{},"i":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}}}}}}}}}}}},"o":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}},"g":{"4":{"docs":{},"j":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}},"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.020618556701030927}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"d":{"docs":{},"u":{"docs":{},"p":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},">":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}},"e":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"z":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"y":{"docs":{},"连":{"docs":{},"接":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.014245014245014245}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.03125},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.008896797153024912}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"将":{"docs":{},"实":{"docs":{},"例":{"docs":{},"方":{"docs":{},"法":{"docs":{},"存":{"docs":{},"储":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"只":{"docs":{},"通":{"docs":{},"知":{"docs":{},"其":{"docs":{},"中":{"docs":{},"一":{"docs":{},"种":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"但":{"docs":{},"该":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"全":{"docs":{},"量":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"是":{"docs":{},"增":{"docs":{},"量":{"docs":{},"的":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"~":{"docs":{},"/":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"当":{"docs":{},"网":{"docs":{},"络":{"docs":{},"断":{"docs":{},"开":{"docs":{},"或":{"docs":{},"连":{"docs":{},"上":{"docs":{},"应":{"docs":{},"该":{"docs":{},"发":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"事":{"docs":{},"件":{"docs":{},",":{"docs":{},"当":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"发":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"事":{"docs":{},"件":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"外":{"docs":{},"围":{"docs":{},"应":{"docs":{},"用":{"docs":{},"就":{"docs":{},"有":{"docs":{},"可":{"docs":{},"能":{"docs":{},"观":{"docs":{},"察":{"docs":{},"到":{"docs":{},"框":{"docs":{},"架":{"docs":{},"内":{"docs":{},"部":{"docs":{},"的":{"docs":{},"变":{"docs":{},"化":{"docs":{},",":{"docs":{},"做":{"docs":{},"相":{"docs":{},"应":{"docs":{},"适":{"docs":{},"应":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"/":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"s":{"docs":{},"g":{"docs":{},"i":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.09782608695652174}},",":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"却":{"docs":{},"为":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"这":{"docs":{},"样":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"i":{"docs":{},"o":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}},"c":{"docs":{},"p":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"w":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},",":{"docs":{},"确":{"docs":{},"保":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}},"e":{"docs":{},"f":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"e":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"由":{"docs":{},"协":{"docs":{},"议":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"通":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"此":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"中":{"docs":{},"发":{"docs":{},"送":{"docs":{},"远":{"docs":{},"程":{"docs":{},"请":{"docs":{},"求":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}},"(":{"docs":{},"如":{"docs":{},":":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},")":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.011976047904191617}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.014970059880239521},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},"{":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}}}}}}}}}},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608}}}}}}}}}},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"e":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"再":{"docs":{},"来":{"docs":{},"一":{"docs":{},"个":{"docs":{},"会":{"docs":{},"话":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"那":{"docs":{},"就":{"docs":{},"再":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/filter.html":{"ref":"impls/filter.html","tf":0.024390243902439025},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983}},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},"s":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.03804347826086957}}}}}},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}},"协":{"docs":{},"议":{"docs":{},"则":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"包":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"类":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"将":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}},"p":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.03293413173652695},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.015209125475285171},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"coding.html":{"ref":"coding.html","tf":0.015151515151515152},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"?":{"docs":{},"而":{"docs":{},"哪":{"docs":{},"些":{"docs":{},"又":{"docs":{},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"踢":{"docs":{},"掉":{"docs":{},"的":{"docs":{},"?":{"docs":{},"基":{"docs":{},"于":{"docs":{},"这":{"docs":{},"样":{"docs":{},"考":{"docs":{},"虑":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"b":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"真":{"docs":{},"正":{"docs":{},"失":{"docs":{},"败":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}},"t":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},".":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.026615969581749048},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04522613065326633},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/extension.html":{"ref":"principals/extension.html","tf":0.02074688796680498},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.02512562814070352},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"e":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"i":{"docs":{},"f":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"j":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"o":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"d":{"docs":{},"o":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.06451612903225806}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"y":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}},"i":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.046875},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":3.3686274509803917},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"s":{"docs":{},"t":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}},"n":{"docs":{},"g":{"docs":{},",":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"c":{"docs":{},"p":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"k":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.16129032258064516}},",":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}},"即":{"docs":{},"可":{"docs":{},"确":{"docs":{},"保":{"docs":{},"与":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"其":{"docs":{},"它":{"docs":{},"部":{"docs":{},"分":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"效":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"健":{"docs":{},"状":{"docs":{},"性":{"docs":{},",":{"docs":{},"也":{"docs":{},"方":{"docs":{},"便":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"接":{"docs":{},"入":{"docs":{},",":{"docs":{},"加":{"docs":{},"速":{"docs":{},"开":{"docs":{},"源":{"docs":{},"社":{"docs":{},"区":{"docs":{},"的":{"docs":{},"成":{"docs":{},"熟":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.06521739130434782}}}}}},"m":{"docs":{},"e":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"为":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"到":{"docs":{},"了":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"给":{"docs":{},"用":{"docs":{},"户":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},"类":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.020958083832335328}}}}}}},"由":{"docs":{},"外":{"docs":{},"层":{"docs":{},"将":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"部":{"docs":{},"署":{"docs":{},"运":{"docs":{},"行":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"在":{"docs":{},"层":{"docs":{},"中":{"docs":{},"画":{"docs":{},"出":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}},"统":{"docs":{},"一":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"了":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"解":{"docs":{},"释":{"docs":{},"上":{"docs":{},"面":{"docs":{},"这":{"docs":{},"张":{"docs":{},"图":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"结":{"docs":{},"合":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"和":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"示":{"docs":{},"例":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"传":{"docs":{},"输":{"docs":{},"时":{"docs":{},"能":{"docs":{},"够":{"docs":{},"对":{"docs":{},"回":{"docs":{},"调":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"例":{"docs":{},"进":{"docs":{},"行":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"与":{"docs":{},"自":{"docs":{},"动":{"docs":{},"引":{"docs":{},"用":{"docs":{},"目":{"docs":{},"前":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"试":{"docs":{},"点":{"docs":{},"项":{"docs":{},"目":{"docs":{},"之":{"docs":{},"一":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},"和":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},",":{"docs":{},"而":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"扩":{"docs":{},"展":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"给":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"入":{"docs":{},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}},"参":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}},"伪":{"docs":{},"装":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"代":{"docs":{},"码":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"信":{"docs":{},"息":{"docs":{},"交":{"docs":{},"换":{"docs":{},"层":{"docs":{},",":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},":":{"docs":{},"封":{"docs":{},"装":{"docs":{},"请":{"docs":{},"求":{"docs":{},"响":{"docs":{},"应":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"同":{"docs":{},"步":{"docs":{},"转":{"docs":{},"异":{"docs":{},"步":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5.0085470085470085}}}},"语":{"docs":{},"义":{"docs":{},"。":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}},"获":{"docs":{},"取":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"公":{"docs":{},"共":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"包":{"docs":{},"括":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"契":{"docs":{},"约":{"docs":{"contract.html":{"ref":"contract.html","tf":5.0476190476190474}},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"所":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"。":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}},"关":{"docs":{},"系":{"docs":{},"说":{"docs":{},"明":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"于":{"docs":{},"每":{"docs":{},"种":{"docs":{},"协":{"docs":{},"议":{"docs":{},"如":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"联":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}},"内":{"docs":{},"部":{"docs":{},"交":{"docs":{},"互":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"再":{"docs":{},"划":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"划":{"docs":{},"分":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"拓":{"docs":{},"普":{"docs":{},"节":{"docs":{},"点":{"docs":{},",":{"docs":{},"保":{"docs":{},"持":{"docs":{},"统":{"docs":{},"一":{"docs":{},"概":{"docs":{},"念":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"如":{"docs":{},"果":{"docs":{},"为":{"docs":{},"其":{"docs":{},"它":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"会":{"docs":{},"检":{"docs":{},"查":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"属":{"docs":{},"性":{"docs":{},"(":{"docs":{},"通":{"docs":{},"过":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"方":{"docs":{},"法":{"docs":{},"判":{"docs":{},"断":{"docs":{},")":{"docs":{},",":{"docs":{},"如":{"docs":{},"该":{"docs":{},"属":{"docs":{},"性":{"docs":{},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"则":{"docs":{},"会":{"docs":{},"注":{"docs":{},"入":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"注":{"docs":{},"入":{"docs":{},"时":{"docs":{},"不":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"(":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"确":{"docs":{},"定":{"docs":{},")":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"注":{"docs":{},"入":{"docs":{},"的":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"(":{"docs":{},"一":{"docs":{},"个":{"docs":{},"代":{"docs":{},"理":{"docs":{},")":{"docs":{},"。":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"选":{"docs":{},"取":{"docs":{},"一":{"docs":{},"个":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"并":{"docs":{},"代":{"docs":{},"理":{"docs":{},"到":{"docs":{},"其":{"docs":{},"上":{"docs":{},"完":{"docs":{},"成":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"你":{"docs":{},"选":{"docs":{},"择":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},",":{"docs":{},"整":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"头":{"docs":{},"约":{"docs":{},"定":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"识":{"docs":{},"别":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}}}}}},"直":{"docs":{},"接":{"docs":{},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":5.003802281368821},"contribution.html":{"ref":"contribution.html","tf":0.030303030303030304}},"点":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},",":{"docs":{},"封":{"docs":{},"装":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}},"不":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"是":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}},"关":{"docs":{},"心":{"docs":{},"业":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"透":{"docs":{},"明":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"以":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"在":{"docs":{},"接":{"docs":{},"收":{"docs":{},"请":{"docs":{},"求":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"记":{"docs":{},"录":{"docs":{},"请":{"docs":{},"求":{"docs":{},"来":{"docs":{},"源":{"docs":{},"方":{"docs":{},"地":{"docs":{},"址":{"docs":{},"信":{"docs":{},"息":{"docs":{},":":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"可":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"完":{"docs":{},"成":{"docs":{},"桥":{"docs":{},"接":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"公":{"docs":{},"共":{"docs":{},"基":{"docs":{},"类":{"docs":{},"实":{"docs":{},"现":{"docs":{},"此":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}},"存":{"docs":{},"在":{"docs":{},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"环":{"docs":{},"境":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"要":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"加":{"docs":{},"载":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"要":{"docs":{},"统":{"docs":{},"一":{"docs":{},",":{"docs":{},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},"+":{"docs":{},"插":{"docs":{},"件":{"docs":{},"式":{"docs":{},",":{"docs":{},"是":{"docs":{},"比":{"docs":{},"较":{"docs":{},"能":{"docs":{},"达":{"docs":{},"到":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"负":{"docs":{},"责":{"docs":{},"组":{"docs":{},"装":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"载":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}},"对":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"激":{"docs":{},"活":{"docs":{},",":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"可":{"docs":{},"选":{"docs":{},"\"":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},"或":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"口":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"会":{"docs":{},"作":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}},"各":{"docs":{},"层":{"docs":{},"说":{"docs":{},"明":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"启":{"docs":{},"动":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"服":{"docs":{},"务":{"docs":{},"通":{"docs":{},"常":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}},"和":{"docs":{"design.html":{"ref":"design.html","tf":0.014970059880239521},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"release.html":{"ref":"release.html","tf":0.014084507042253521},"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"消":{"docs":{},"费":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"部":{"docs":{},"门":{"docs":{},"以":{"docs":{},"及":{"docs":{},"产":{"docs":{},"品":{"docs":{},"线":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"将":{"docs":{},"很":{"docs":{},"多":{"docs":{},"不":{"docs":{},"相":{"docs":{},"干":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"凑":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"客":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"性":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"产":{"docs":{},"品":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"都":{"docs":{},"在":{"docs":{},"不":{"docs":{},"停":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"我":{"docs":{},"们":{"docs":{},"经":{"docs":{},"常":{"docs":{},"会":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"些":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"将":{"docs":{},"新":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"用":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"我":{"docs":{},"想":{"docs":{},"讨":{"docs":{},"论":{"docs":{},"是":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"保":{"docs":{},"留":{"docs":{},"原":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"性":{"docs":{},",":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"独":{"docs":{},"立":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"我":{"docs":{},"最":{"docs":{},"近":{"docs":{},"一":{"docs":{},"直":{"docs":{},"做":{"docs":{},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},",":{"docs":{},"就":{"docs":{},"拿":{"docs":{},"我":{"docs":{},"们":{"docs":{},"项":{"docs":{},"目":{"docs":{},"中":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"开":{"docs":{},"涮":{"docs":{},"吧":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"图":{"docs":{},"中":{"docs":{},"从":{"docs":{},"下":{"docs":{},"至":{"docs":{},"上":{"docs":{},"分":{"docs":{},"为":{"docs":{},"十":{"docs":{},"层":{"docs":{},",":{"docs":{},"各":{"docs":{},"层":{"docs":{},"均":{"docs":{},"为":{"docs":{},"单":{"docs":{},"向":{"docs":{},"依":{"docs":{},"赖":{"docs":{},",":{"docs":{},"右":{"docs":{},"边":{"docs":{},"的":{"docs":{},"黑":{"docs":{},"色":{"docs":{},"箭":{"docs":{},"头":{"docs":{},"代":{"docs":{},"表":{"docs":{},"层":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"每":{"docs":{},"一":{"docs":{},"层":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"剥":{"docs":{},"离":{"docs":{},"上":{"docs":{},"层":{"docs":{},"被":{"docs":{},"复":{"docs":{},"用":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"小":{"docs":{},"方":{"docs":{},"块":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"左":{"docs":{},"边":{"docs":{},"淡":{"docs":{},"蓝":{"docs":{},"背":{"docs":{},"景":{"docs":{},"的":{"docs":{},"为":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"右":{"docs":{},"边":{"docs":{},"淡":{"docs":{},"绿":{"docs":{},"色":{"docs":{},"背":{"docs":{},"景":{"docs":{},"的":{"docs":{},"为":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"位":{"docs":{},"于":{"docs":{},"中":{"docs":{},"轴":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"为":{"docs":{},"双":{"docs":{},"方":{"docs":{},"都":{"docs":{},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"绿":{"docs":{},"色":{"docs":{},"小":{"docs":{},"块":{"docs":{},"的":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"小":{"docs":{},"块":{"docs":{},"为":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},",":{"docs":{},"图":{"docs":{},"中":{"docs":{},"只":{"docs":{},"显":{"docs":{},"示":{"docs":{},"用":{"docs":{},"于":{"docs":{},"关":{"docs":{},"联":{"docs":{},"各":{"docs":{},"层":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"背":{"docs":{},"景":{"docs":{},"方":{"docs":{},"块":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"蓝":{"docs":{},"色":{"docs":{},"虚":{"docs":{},"线":{"docs":{},"为":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"红":{"docs":{},"色":{"docs":{},"虚":{"docs":{},"线":{"docs":{},"为":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"异":{"docs":{},"步":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"红":{"docs":{},"色":{"docs":{},"实":{"docs":{},"线":{"docs":{},"为":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"同":{"docs":{},"步":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"即":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},"组":{"docs":{},"装":{"docs":{},"链":{"docs":{},",":{"docs":{},"红":{"docs":{},"色":{"docs":{},"实":{"docs":{},"线":{"docs":{},"为":{"docs":{},"方":{"docs":{},"法":{"docs":{},"调":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"即":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"调":{"docs":{},"时":{"docs":{},"链":{"docs":{},",":{"docs":{},"紫":{"docs":{},"色":{"docs":{},"三":{"docs":{},"角":{"docs":{},"箭":{"docs":{},"头":{"docs":{},"为":{"docs":{},"继":{"docs":{},"承":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"把":{"docs":{},"子":{"docs":{},"类":{"docs":{},"看":{"docs":{},"作":{"docs":{},"父":{"docs":{},"类":{"docs":{},"的":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"节":{"docs":{},"点":{"docs":{},",":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"文":{"docs":{},"字":{"docs":{},"为":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}}},"基":{"docs":{},"本":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"于":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},"之":{"docs":{},"上":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}},"复":{"docs":{},"用":{"docs":{},"度":{"docs":{},"分":{"docs":{},"包":{"docs":{},",":{"docs":{},"总":{"docs":{},"是":{"docs":{},"一":{"docs":{},"起":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"放":{"docs":{},"在":{"docs":{},"同":{"docs":{},"一":{"docs":{},"包":{"docs":{},"下":{"docs":{},",":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"和":{"docs":{},"基":{"docs":{},"类":{"docs":{},"分":{"docs":{},"成":{"docs":{},"独":{"docs":{},"立":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"大":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"也":{"docs":{},"使":{"docs":{},"用":{"docs":{},"独":{"docs":{},"立":{"docs":{},"模":{"docs":{},"块":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"也":{"docs":{},"是":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"础":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"在":{"docs":{},"此":{"docs":{},"之":{"docs":{},"上":{"docs":{},"实":{"docs":{},"现":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"在":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"里":{"docs":{},"动":{"docs":{},"态":{"docs":{},"生":{"docs":{},"成":{"docs":{},"。":{"docs":{},"指":{"docs":{},"定":{"docs":{},"提":{"docs":{},"取":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"先":{"docs":{},"查":{"docs":{},"找":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"来":{"docs":{},"调":{"docs":{},"用":{"docs":{},"对":{"docs":{},"应":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"类":{"docs":{},"内":{"docs":{},"容":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"的":{"docs":{},"实":{"docs":{},"例":{"docs":{},"报":{"docs":{},"上":{"docs":{},"来":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"只":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"这":{"docs":{},"些":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"这":{"docs":{},"些":{"docs":{},"对":{"docs":{},"象":{"docs":{},"是":{"docs":{},"怎":{"docs":{},"么":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},",":{"docs":{},"怎":{"docs":{},"么":{"docs":{},"销":{"docs":{},"毁":{"docs":{},"的":{"docs":{},",":{"docs":{},"都":{"docs":{},"和":{"docs":{},"框":{"docs":{},"架":{"docs":{},"无":{"docs":{},"关":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"最":{"docs":{},"多":{"docs":{},"提":{"docs":{},"供":{"docs":{},"工":{"docs":{},"具":{"docs":{},"类":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"控":{"docs":{},"制":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},",":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"类":{"docs":{},"名":{"docs":{},"或":{"docs":{},"类":{"docs":{},"元":{"docs":{},"信":{"docs":{},"息":{"docs":{},"报":{"docs":{},"上":{"docs":{},"来":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"在":{"docs":{},"内":{"docs":{},"部":{"docs":{},"通":{"docs":{},"过":{"docs":{},"反":{"docs":{},"射":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":5.002597402597402}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{},"传":{"docs":{},"递":{"docs":{},"采":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"对":{"docs":{},"于":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{},"由":{"docs":{},"于":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"共":{"docs":{},"享":{"docs":{},"连":{"docs":{},"接":{"docs":{},",":{"docs":{},"那":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"通":{"docs":{},"用":{"docs":{},"行":{"docs":{},"为":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"基":{"docs":{},"类":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"之":{"docs":{},"前":{"docs":{},"的":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"每":{"docs":{},"个":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"是":{"docs":{},"调":{"docs":{},"用":{"docs":{},"链":{"docs":{},"上":{"docs":{},"的":{"docs":{},"一":{"docs":{},"环":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}},"会":{"docs":{},"将":{"docs":{},"收":{"docs":{},"到":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"转":{"docs":{},"给":{"docs":{},"目":{"docs":{},"标":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"就":{"docs":{},"能":{"docs":{},"将":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"增":{"docs":{},"量":{"docs":{},"到":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"上":{"docs":{},",":{"docs":{},"并":{"docs":{},"保":{"docs":{},"持":{"docs":{},"原":{"docs":{},"来":{"docs":{},"结":{"docs":{},"构":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"性":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}},"际":{"docs":{},"上":{"docs":{},"不":{"docs":{},"算":{"docs":{},"一":{"docs":{},"层":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"节":{"docs":{},"点":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"全":{"docs":{},"局":{"docs":{},"概":{"docs":{},"览":{"docs":{},",":{"docs":{},"用":{"docs":{},"层":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"画":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"取":{"docs":{},"约":{"docs":{},"定":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"是":{"docs":{},"固":{"docs":{},"定":{"docs":{},",":{"docs":{},"指":{"docs":{},"定":{"docs":{},"提":{"docs":{},"取":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"细":{"docs":{},"节":{"docs":{},"和":{"docs":{},"上":{"docs":{},"一":{"docs":{},"章":{"docs":{},"节":{"docs":{},"所":{"docs":{},"描":{"docs":{},"述":{"docs":{},"的":{"docs":{},"类":{"docs":{},"似":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"方":{"docs":{},"法":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"才":{"docs":{},"决":{"docs":{},"定":{"docs":{},"调":{"docs":{},"用":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}},"从":{"docs":{},"而":{"docs":{},"真":{"docs":{},"正":{"docs":{},"调":{"docs":{},"用":{"docs":{},"了":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}},"到":{"docs":{},"这":{"docs":{},"一":{"docs":{},"步":{"docs":{},"就":{"docs":{},"完":{"docs":{},"成":{"docs":{},"具":{"docs":{},"体":{"docs":{},"服":{"docs":{},"务":{"docs":{},"到":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},"并":{"docs":{},"新":{"docs":{},"生":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"调":{"docs":{},"用":{"docs":{},"它":{"docs":{},"所":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"(":{"docs":{},"如":{"docs":{},"上":{"docs":{},"图":{"docs":{},"中":{"docs":{},"的":{"docs":{},"红":{"docs":{},"色":{"docs":{},"部":{"docs":{},"分":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"的":{"docs":{},"关":{"docs":{},"键":{"docs":{},"。":{"docs":{},"接":{"docs":{},"下":{"docs":{},"来":{"docs":{},"把":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"当":{"docs":{},"网":{"docs":{},"络":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"层":{"docs":{},"收":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"请":{"docs":{},"求":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"找":{"docs":{},"到":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}},"容":{"docs":{},"器":{"docs":{},"去":{"docs":{},"加":{"docs":{},"载":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"的":{"docs":{},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"没":{"docs":{},"必":{"docs":{},"要":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":5.014705882352941}}}},"。":{"docs":{},"自":{"docs":{},"已":{"docs":{},"造":{"docs":{},"一":{"docs":{},"个":{"docs":{},"小":{"docs":{},"的":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},",":{"docs":{},"也":{"docs":{},"觉":{"docs":{},"得":{"docs":{},"有":{"docs":{},"点":{"docs":{},"过":{"docs":{},"度":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"打":{"docs":{},"算":{"docs":{},"采":{"docs":{},"用":{"docs":{},"最":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}},"错":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},",":{"docs":{},"路":{"docs":{},"由":{"docs":{},"等":{"docs":{},",":{"docs":{},"集":{"docs":{},"群":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"列":{"docs":{},"表":{"docs":{},"可":{"docs":{},"以":{"docs":{},"是":{"docs":{},"静":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"是":{"docs":{},"由":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"下":{"docs":{},"发":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"其":{"docs":{},"它":{"docs":{},"层":{"docs":{},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"造":{"docs":{},"成":{"docs":{},"影":{"docs":{},"响":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"时":{"docs":{},",":{"docs":{},"是":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"唯":{"docs":{},"一":{"docs":{},"异":{"docs":{},"常":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"内":{"docs":{},"部":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"给":{"docs":{},"用":{"docs":{},"户":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"转":{"docs":{},"为":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"于":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"集":{"docs":{},"合":{"docs":{},"类":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}},"容":{"docs":{},"错":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"对":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},"和":{"docs":{},"可":{"docs":{},"见":{"docs":{},"性":{"docs":{},"的":{"docs":{},"深":{"docs":{},"入":{"docs":{},"理":{"docs":{},"解":{"docs":{},"是":{"docs":{},"最":{"docs":{},"基":{"docs":{},"本":{"docs":{},"的":{"docs":{},"要":{"docs":{},"求":{"docs":{},"。":{"docs":{},"需":{"docs":{},"要":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"在":{"docs":{},"写":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"都":{"docs":{},"应":{"docs":{},"在":{"docs":{},"潜":{"docs":{},"意":{"docs":{},"识":{"docs":{},"中":{"docs":{},"确":{"docs":{},"保":{"docs":{},"其":{"docs":{},"正":{"docs":{},"确":{"docs":{},"性":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"种":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"在":{"docs":{},"小":{"docs":{},"并":{"docs":{},"发":{"docs":{},"下":{"docs":{},"做":{"docs":{},"功":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"显":{"docs":{},"得":{"docs":{},"很":{"docs":{},"正":{"docs":{},"常":{"docs":{},"。":{"docs":{},"但":{"docs":{},"在":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"下":{"docs":{},"就":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"莫":{"docs":{},"明":{"docs":{},"其":{"docs":{},"妙":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"场":{"docs":{},"景":{"docs":{},"很":{"docs":{},"难":{"docs":{},"重":{"docs":{},"现":{"docs":{},",":{"docs":{},"极":{"docs":{},"难":{"docs":{},"排":{"docs":{},"查":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"环":{"docs":{},"境":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"应":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"不":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"执":{"docs":{},"行":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"值":{"docs":{},"(":{"docs":{},"实":{"docs":{},"例":{"docs":{},"方":{"docs":{},"法":{"docs":{},")":{"docs":{},"加":{"docs":{},"入":{"docs":{},"到":{"docs":{},"异":{"docs":{},"步":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"回":{"docs":{},"调":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}},"象":{"docs":{},"(":{"docs":{},"包":{"docs":{},"含":{"docs":{},"了":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"转":{"docs":{},"换":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}},"封":{"docs":{},"装":{"docs":{},"了":{"docs":{},"本":{"docs":{},"来":{"docs":{},"要":{"docs":{},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"直":{"docs":{},"接":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"都":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"等":{"docs":{},"网":{"docs":{},"络":{"docs":{},"节":{"docs":{},"点":{"docs":{},"组":{"docs":{},"网":{"docs":{},"器":{"docs":{},"。":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}},"多":{"docs":{},"种":{"docs":{},"相":{"docs":{},"似":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},",":{"docs":{},"用":{"docs":{},"基":{"docs":{},"类":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}},"产":{"docs":{},"品":{"docs":{},"都":{"docs":{},"很":{"docs":{},"重":{"docs":{},"要":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"添":{"docs":{},"加":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}},"多":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"对":{"docs":{},"象":{"docs":{},"转":{"docs":{},"成":{"docs":{},"字":{"docs":{},"节":{"docs":{},"流":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"网":{"docs":{},"络":{"docs":{},"传":{"docs":{},"输":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"将":{"docs":{},"字":{"docs":{},"节":{"docs":{},"流":{"docs":{},"转":{"docs":{},"为":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"在":{"docs":{},"收":{"docs":{},"到":{"docs":{},"字":{"docs":{},"节":{"docs":{},"流":{"docs":{},"数":{"docs":{},"据":{"docs":{},"后":{"docs":{},"还":{"docs":{},"原":{"docs":{},"成":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"完":{"docs":{},"成":{"docs":{},"非":{"docs":{},"透":{"docs":{},"明":{"docs":{},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"是":{"docs":{},"上":{"docs":{},"图":{"docs":{},"中":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"端":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"变":{"docs":{},"契":{"docs":{},"约":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}},"出":{"docs":{},"现":{"docs":{},"过":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"中":{"docs":{},"间":{"docs":{},"层":{"docs":{},"用":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"做":{"docs":{},"为":{"docs":{},"缓":{"docs":{},"存":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"留":{"docs":{},"一":{"docs":{},"些":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"让":{"docs":{},"参":{"docs":{},"与":{"docs":{},"者":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"黑":{"docs":{},"盒":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"白":{"docs":{},"盒":{"docs":{},"的":{"docs":{},"修":{"docs":{},"改":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"分":{"docs":{},"支":{"docs":{},",":{"docs":{},"质":{"docs":{},"量":{"docs":{},",":{"docs":{},"合":{"docs":{},"并":{"docs":{},",":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"都":{"docs":{},"会":{"docs":{},"很":{"docs":{},"难":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"要":{"docs":{},"满":{"docs":{},"足":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"层":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"只":{"docs":{},"负":{"docs":{},"责":{"docs":{},"单":{"docs":{},"向":{"docs":{},"消":{"docs":{},"息":{"docs":{},"传":{"docs":{},"输":{"docs":{},",":{"docs":{},"是":{"docs":{},"对":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}},"和":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}},"封":{"docs":{},"装":{"docs":{},"了":{"docs":{},"所":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"透":{"docs":{},"明":{"docs":{},"化":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"而":{"docs":{},"在":{"docs":{},"其":{"docs":{},"它":{"docs":{},"层":{"docs":{},"都":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"是":{"docs":{},"在":{"docs":{},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},"之":{"docs":{},"上":{"docs":{},"封":{"docs":{},"装":{"docs":{},"了":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"都":{"docs":{},"放":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}},"展":{"docs":{},"开":{"docs":{},"总":{"docs":{},"设":{"docs":{},"计":{"docs":{},"图":{"docs":{},"右":{"docs":{},"边":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"链":{"docs":{},",":{"docs":{},"时":{"docs":{},"序":{"docs":{},"图":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}},"左":{"docs":{},"边":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"链":{"docs":{},",":{"docs":{},"时":{"docs":{},"序":{"docs":{},"图":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"红":{"docs":{},"色":{"docs":{},"调":{"docs":{},"用":{"docs":{},"链":{"docs":{},",":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"时":{"docs":{},"序":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"监":{"docs":{},"听":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5.013888888888889}}}}}},"和":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}},"了":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"所":{"docs":{},"有":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"均":{"docs":{},"支":{"docs":{},"持":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"参":{"docs":{},"数":{"docs":{},"都":{"docs":{},"包":{"docs":{},"含":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"放":{"docs":{},"在":{"docs":{},"模":{"docs":{},"块":{"docs":{},"的":{"docs":{},"根":{"docs":{},"包":{"docs":{},"下":{"docs":{},",":{"docs":{},"基":{"docs":{},"类":{"docs":{},"放":{"docs":{},"在":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"在":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"以":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"核":{"docs":{},"心":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"写":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}},"拦":{"docs":{},"截":{"docs":{},"点":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"扩":{"docs":{},"展":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"携":{"docs":{},"带":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"数":{"docs":{},"据":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"层":{"docs":{},":":{"docs":{},"可":{"docs":{},"复":{"docs":{},"用":{"docs":{},"的":{"docs":{},"一":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}},"库":{"docs":{},"上":{"docs":{},"的":{"docs":{},"活":{"docs":{},"锁":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"组":{"docs":{},",":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"然":{"docs":{},"而":{"docs":{},",":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"都":{"docs":{},"用":{"docs":{},"不":{"docs":{},"上":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"后":{"docs":{},"传":{"docs":{},"给":{"docs":{},"业":{"docs":{},"务":{"docs":{},"方":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"量":{"docs":{},"相":{"docs":{},"对":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"会":{"docs":{},"对":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"造":{"docs":{},"成":{"docs":{},"冲":{"docs":{},"击":{"docs":{},"。":{"docs":{},"避":{"docs":{},"免":{"docs":{},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"以":{"docs":{},"是":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}},"整":{"docs":{},"体":{"docs":{},"上":{"docs":{},"按":{"docs":{},"照":{"docs":{},"分":{"docs":{},"层":{"docs":{},"结":{"docs":{},"构":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"包":{"docs":{},",":{"docs":{},"与":{"docs":{},"分":{"docs":{},"层":{"docs":{},"的":{"docs":{},"不":{"docs":{},"同":{"docs":{},"点":{"docs":{},"在":{"docs":{},"于":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"计":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"都":{"docs":{},"隐":{"docs":{},"含":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"理":{"docs":{},"后":{"docs":{},",":{"docs":{},"设":{"docs":{},"计":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"是":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"持":{"docs":{},"有":{"docs":{},"调":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"方":{"docs":{},"法":{"docs":{},"名":{"docs":{},",":{"docs":{},"参":{"docs":{},"数":{"docs":{},"等":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"外":{"docs":{},"围":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"抽":{"docs":{},"象":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"想":{"docs":{},"让":{"docs":{},"看":{"docs":{},"图":{"docs":{},"者":{"docs":{},"更":{"docs":{},"直":{"docs":{},"观":{"docs":{},"的":{"docs":{},"了":{"docs":{},"解":{"docs":{},"哪":{"docs":{},"些":{"docs":{},"类":{"docs":{},"分":{"docs":{},"属":{"docs":{},"于":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"与":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"核":{"docs":{},"心":{"docs":{},"层":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"只":{"docs":{},"要":{"docs":{},"有":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"包":{"docs":{},"装":{"docs":{},"的":{"docs":{},"最":{"docs":{},"终":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"给":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"用":{"docs":{},"的":{"docs":{},"。":{"docs":{},"在":{"docs":{},"设":{"docs":{},"计":{"docs":{},"时":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"把":{"docs":{},"它":{"docs":{},"们":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"开":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"混":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},"。":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"说":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"看":{"docs":{},"不":{"docs":{},"到":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"写":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"隔":{"docs":{},"离":{"docs":{},"的":{"docs":{},"。":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"流":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}},"否":{"docs":{},"使":{"docs":{},"用":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"允":{"docs":{},"许":{"docs":{},"重":{"docs":{},"试":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"次":{"docs":{},"数":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}},"根":{"docs":{},"据":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"法":{"docs":{},"参":{"docs":{},"数":{"docs":{},"(":{"docs":{},"上":{"docs":{},"面":{"docs":{},"有":{"docs":{},"调":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},")":{"docs":{},"来":{"docs":{},"选":{"docs":{},"取":{"docs":{},"一":{"docs":{},"个":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"和":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"主":{"docs":{},"功":{"docs":{},"能":{"docs":{},"入":{"docs":{},"口":{"docs":{},",":{"docs":{},"它":{"docs":{},"负":{"docs":{},"责":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"时":{"docs":{},"序":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"取":{"docs":{},"消":{"docs":{},"暴":{"docs":{},"露":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"监":{"docs":{},"听":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5.013888888888889}}}}}},"了":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"更":{"docs":{},"多":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"框":{"docs":{},"架":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"代":{"docs":{},"理":{"docs":{},"层":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"透":{"docs":{},"明":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"生":{"docs":{},"成":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"代":{"docs":{},"码":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"暴":{"docs":{},"露":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"详":{"docs":{},"细":{"docs":{},"过":{"docs":{},"程":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"选":{"docs":{},"择":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"方":{"docs":{},"和":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"调":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},"拦":{"docs":{},"截":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"程":{"docs":{},"实":{"docs":{},"现":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"当":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"收":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"请":{"docs":{},"求":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"线":{"docs":{},"程":{"docs":{},"池":{"docs":{},"中":{"docs":{},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"代":{"docs":{},"码":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"消":{"docs":{},"费":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"详":{"docs":{},"细":{"docs":{},"过":{"docs":{},"程":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}},"息":{"docs":{},"者":{"docs":{},"从":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"拿":{"docs":{},"到":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"保":{"docs":{},"存":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"到":{"docs":{},"内":{"docs":{},"存":{"docs":{},"和":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"宕":{"docs":{},"后":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"可":{"docs":{},"以":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"转":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"宕":{"docs":{},"机":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"重":{"docs":{},"启":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"。":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},",":{"docs":{},"发":{"docs":{},"现":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"会":{"docs":{},"读":{"docs":{},"取":{"docs":{},"保":{"docs":{},"存":{"docs":{},"在":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{},"重":{"docs":{},"试":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"保":{"docs":{},"证":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"后":{"docs":{},",":{"docs":{},"更":{"docs":{},"新":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"细":{"docs":{},"节":{"docs":{},"这":{"docs":{},"一":{"docs":{},"块":{"docs":{},"由":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"体":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"本":{"docs":{},"地":{"docs":{},"代":{"docs":{},"理":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}},"类":{"docs":{},"型":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"容":{"docs":{},"器":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"加":{"docs":{},"载":{"docs":{},"内":{"docs":{},"容":{"docs":{},"。":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}}}}},"域":{"docs":{},"/":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"/":{"docs":{},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},"分":{"docs":{},"离":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"行":{"docs":{},"为":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{},"组":{"docs":{},"件":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"集":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"也":{"docs":{},"负":{"docs":{},"责":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"和":{"docs":{},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{},"包":{"docs":{},"仓":{"docs":{},"库":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.011363636363636364}}}}}}},"分":{"docs":{},"组":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"版":{"docs":{},"本":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"路":{"docs":{},"径":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"框":{"docs":{},"架":{"docs":{},"设":{"docs":{},"计":{"docs":{"design.html":{"ref":"design.html","tf":5.002994011976048}}}},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"都":{"docs":{},"继":{"docs":{},"承":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"将":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"或":{"docs":{},"组":{"docs":{},"件":{"docs":{},"通":{"docs":{},"常":{"docs":{},"有":{"docs":{},"两":{"docs":{},"类":{"docs":{},"客":{"docs":{},"户":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"。":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},",":{"docs":{},"它":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"那":{"docs":{},"至":{"docs":{},"少":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"请":{"docs":{},"求":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"应":{"docs":{},"该":{"docs":{},"要":{"docs":{},"有":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"没":{"docs":{},"有":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"公":{"docs":{},"用":{"docs":{},"的":{"docs":{},"框":{"docs":{},"架":{"docs":{},"可":{"docs":{},"以":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"模":{"docs":{},"块":{"docs":{},"中":{"docs":{},",":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"以":{"docs":{},"便":{"docs":{},"更":{"docs":{},"大":{"docs":{},"程":{"docs":{},"度":{"docs":{},"复":{"docs":{},"用":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"这":{"docs":{},"两":{"docs":{},"层":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"分":{"docs":{},"包":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"与":{"docs":{},"分":{"docs":{},"包":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"式":{"docs":{},",":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}},"板":{"docs":{},"输":{"docs":{},"出":{"docs":{},"的":{"docs":{},"就":{"docs":{},"继":{"docs":{},"承":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"还":{"docs":{},"是":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"型":{"docs":{},"类":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"层":{"docs":{},":":{"docs":{},"封":{"docs":{},"装":{"docs":{},"服":{"docs":{},"务":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"与":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"以":{"docs":{},"服":{"docs":{},"务":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"基":{"docs":{},"于":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"下":{"docs":{},"发":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"集":{"docs":{},"群":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"对":{"docs":{},"各":{"docs":{},"种":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"总":{"docs":{},"不":{"docs":{},"返":{"docs":{},"回":{"docs":{},"空":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":5.002849002849003},"contribution.html":{"ref":"contribution.html","tf":0.015151515151515152}}}},"会":{"docs":{},"定":{"docs":{},"时":{"docs":{},"更":{"docs":{},"新":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"一":{"docs":{},"条":{"docs":{},"记":{"docs":{},"录":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"集":{"docs":{},"群":{"docs":{},"中":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"感":{"docs":{},"知":{"docs":{},"它":{"docs":{},"是":{"docs":{},"存":{"docs":{},"活":{"docs":{},"。":{"docs":{},"过":{"docs":{},"期":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"和":{"docs":{},"它":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"数":{"docs":{},"据":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"认":{"docs":{},"为":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}},"推":{"docs":{},"送":{"docs":{},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{},"推":{"docs":{},"送":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"地":{"docs":{},"址":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"入":{"docs":{},"其":{"docs":{},"它":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"直":{"docs":{},"接":{"docs":{},"依":{"docs":{},"赖":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}},"意":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"使":{"docs":{},"用":{"docs":{},"单":{"docs":{},"一":{"docs":{},"实":{"docs":{},"例":{"docs":{},"加":{"docs":{},"载":{"docs":{},"(":{"docs":{},"请":{"docs":{},"确":{"docs":{},"保":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},")":{"docs":{},",":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"在":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"里":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"是":{"docs":{},"放":{"docs":{},"在":{"docs":{},"你":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}},"解":{"docs":{},"在":{"docs":{},"接":{"docs":{},"口":{"docs":{},"方":{"docs":{},"法":{"docs":{},"上":{"docs":{},"提":{"docs":{},"供":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"上":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"户":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}},"要":{"docs":{},"配":{"docs":{},"合":{"docs":{},"的":{"docs":{},"职":{"docs":{},"责":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}},"法":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"请":{"docs":{},"求":{"docs":{},"参":{"docs":{},"数":{"docs":{},"作":{"docs":{},"为":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}},"一":{"docs":{},"个":{"docs":{},"无":{"docs":{},"效":{"docs":{},"值":{"docs":{},"代":{"docs":{},"表":{"docs":{},"关":{"docs":{},"闭":{"docs":{},",":{"docs":{},"n":{"docs":{},"/":{"docs":{},"a":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"0":{"docs":{},"重":{"docs":{},"试":{"docs":{},"次":{"docs":{},"数":{"docs":{},"等":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}},"到":{"docs":{},"的":{"docs":{},"原":{"docs":{},"则":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}},"于":{"docs":{},"当":{"docs":{},"出":{"docs":{},"现":{"docs":{},"异":{"docs":{},"常":{"docs":{},"场":{"docs":{},"景":{"docs":{},"时":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"影":{"docs":{},"响":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"的":{"docs":{},"正":{"docs":{},"常":{"docs":{},"调":{"docs":{},"用":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"开":{"docs":{},"启":{"docs":{},"无":{"docs":{},"用":{"docs":{},"的":{"docs":{},"连":{"docs":{},"接":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"来":{"docs":{},"确":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"信":{"docs":{},"息":{"docs":{},"通":{"docs":{},"过":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}},"监":{"docs":{},"控":{"docs":{},"层":{"docs":{},":":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"统":{"docs":{},"计":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"链":{"docs":{},"跟":{"docs":{},"踪":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"心":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":5.011764705882353},"contribution.html":{"ref":"contribution.html","tf":0.022727272727272728}}}}}}}},"等":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"加":{"docs":{},"载":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"此":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"自":{"docs":{},"动":{"docs":{},"激":{"docs":{},"活":{"docs":{},"来":{"docs":{},"简":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"类":{"docs":{},"配":{"docs":{},"置":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}},"它":{"docs":{},"们":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"协":{"docs":{},"议":{"docs":{},"都":{"docs":{},"已":{"docs":{},"生":{"docs":{},"成":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"将":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"代":{"docs":{},"理":{"docs":{},"转":{"docs":{},"成":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}},"于":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}},"工":{"docs":{},"具":{"docs":{},"的":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"基":{"docs":{},"本":{"docs":{},"都":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},",":{"docs":{},"也":{"docs":{},"能":{"docs":{},"理":{"docs":{},"解":{"docs":{},"它":{"docs":{},"的":{"docs":{},"好":{"docs":{},"处":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"工":{"docs":{},"作":{"docs":{},"量":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"要":{"docs":{},"特":{"docs":{},"别":{"docs":{},"强":{"docs":{},"调":{"docs":{},"的":{"docs":{},"是":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"单":{"docs":{},"一":{"docs":{},"性":{"docs":{},"(":{"docs":{},"只":{"docs":{},"测":{"docs":{},"目":{"docs":{},"标":{"docs":{},"类":{"docs":{},"本":{"docs":{},"身":{"docs":{},")":{"docs":{},"和":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"性":{"docs":{},"(":{"docs":{},"不":{"docs":{},"传":{"docs":{},"染":{"docs":{},"失":{"docs":{},"败":{"docs":{},")":{"docs":{},"。":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"过":{"docs":{},"于":{"docs":{},"强":{"docs":{},"调":{"docs":{},"完":{"docs":{},"备":{"docs":{},"性":{"docs":{},",":{"docs":{},"大":{"docs":{},"量":{"docs":{},"重":{"docs":{},"复":{"docs":{},"交":{"docs":{},"叉":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"没":{"docs":{},"啥":{"docs":{},"坏":{"docs":{},"处":{"docs":{},",":{"docs":{},"但":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"维":{"docs":{},"护":{"docs":{},"代":{"docs":{},"价":{"docs":{},"越":{"docs":{},"高":{"docs":{},"。":{"docs":{},"经":{"docs":{},"常":{"docs":{},"出":{"docs":{},"现":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"是":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"或":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{},"判":{"docs":{},"断":{"docs":{},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"引":{"docs":{},"起":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"服":{"docs":{},"务":{"docs":{},"域":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"比":{"docs":{},"较":{"docs":{},"重":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},",":{"docs":{},"并":{"docs":{},"以":{"docs":{},"单":{"docs":{},"一":{"docs":{},"实":{"docs":{},"例":{"docs":{},"服":{"docs":{},"务":{"docs":{},"于":{"docs":{},"所":{"docs":{},"有":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},"有":{"docs":{},"它":{"docs":{},"的":{"docs":{},"优":{"docs":{},"势":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"简":{"docs":{},"化":{"docs":{},"了":{"docs":{},"用":{"docs":{},"户":{"docs":{},"对":{"docs":{},"配":{"docs":{},"置":{"docs":{},"加":{"docs":{},"载":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},"干":{"docs":{},"预":{"docs":{},"。":{"docs":{},"但":{"docs":{},"同":{"docs":{},"样":{"docs":{},"有":{"docs":{},"它":{"docs":{},"的":{"docs":{},"缺":{"docs":{},"点":{"docs":{},",":{"docs":{},"当":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"等":{"docs":{},"。":{"docs":{},"这":{"docs":{},"个":{"docs":{},"核":{"docs":{},"心":{"docs":{},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{},"及":{"docs":{},"其":{"docs":{},"组":{"docs":{},"成":{"docs":{},"部":{"docs":{},"分":{"docs":{},"称":{"docs":{},"为":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"代":{"docs":{},"表":{"docs":{},"着":{"docs":{},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"目":{"docs":{},"标":{"docs":{},"本":{"docs":{},"身":{"docs":{},"。":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"管":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},",":{"docs":{},"同":{"docs":{},"步":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"或":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"要":{"docs":{},"因":{"docs":{},"为":{"docs":{},"外":{"docs":{},"部":{"docs":{},"的":{"docs":{},"请":{"docs":{},"求":{"docs":{},"、":{"docs":{},"数":{"docs":{},"据":{"docs":{},"不":{"docs":{},"受":{"docs":{},"限":{"docs":{},"的":{"docs":{},"而":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"全":{"docs":{},"部":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"需":{"docs":{},"要":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"候":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"会":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"提":{"docs":{},"供":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"式":{"docs":{},"管":{"docs":{},"理":{"docs":{},"插":{"docs":{},"件":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"。":{"docs":{},"考":{"docs":{},"虑":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}},"类":{"docs":{},"和":{"docs":{},"通":{"docs":{},"用":{"docs":{},"模":{"docs":{},"型":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{},"失":{"docs":{},"败":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"失":{"docs":{},"败":{"docs":{},"原":{"docs":{},"因":{"docs":{},"被":{"docs":{},"吃":{"docs":{},"掉":{"docs":{},"了":{"docs":{},",":{"docs":{},"和":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"把":{"docs":{},"所":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"公":{"docs":{},"共":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"移":{"docs":{},"至":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"需":{"docs":{},"要":{"docs":{},"新":{"docs":{},"增":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}},"同":{"docs":{},"样":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"拿":{"docs":{},"到":{"docs":{},"对":{"docs":{},"外":{"docs":{},"提":{"docs":{},"供":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"实":{"docs":{},"际":{"docs":{},"类":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"种":{"docs":{},"是":{"docs":{},"最":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"将":{"docs":{},"所":{"docs":{},"有":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}},"而":{"docs":{},"且":{"docs":{},"和":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"加":{"docs":{},"载":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"有":{"docs":{},"关":{"docs":{},",":{"docs":{},"问":{"docs":{},"题":{"docs":{},"带":{"docs":{},"有":{"docs":{},"偶":{"docs":{},"然":{"docs":{},"性":{"docs":{},",":{"docs":{},"误":{"docs":{},"导":{"docs":{},"性":{"docs":{},",":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"这":{"docs":{},"种":{"docs":{},"莫":{"docs":{},"名":{"docs":{},"其":{"docs":{},"妙":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"最":{"docs":{},"头":{"docs":{},"疼":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"条":{"docs":{},",":{"docs":{},"先":{"docs":{},"把":{"docs":{},"它":{"docs":{},"防":{"docs":{},"住":{"docs":{},",":{"docs":{},"在":{"docs":{},"每":{"docs":{},"个":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"了":{"docs":{},"旧":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"都":{"docs":{},"命":{"docs":{},"名":{"docs":{},"为":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"型":{"docs":{},"的":{"docs":{},"开":{"docs":{},"关":{"docs":{},",":{"docs":{},"再":{"docs":{},"配":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"包":{"docs":{},"装":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"网":{"docs":{},"络":{"docs":{},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},":":{"docs":{},"抽":{"docs":{},"象":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":5.005025125628141}}}}}},"通":{"docs":{},"讯":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"通":{"docs":{},"过":{"docs":{},"共":{"docs":{},"享":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"i":{"docs":{},"p":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"而":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"对":{"docs":{},"于":{"docs":{},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"要":{"docs":{},"参":{"docs":{},"与":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"嵌":{"docs":{},"到":{"docs":{},"应":{"docs":{},"用":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},"中":{"docs":{},"。":{"docs":{},"现":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"底":{"docs":{},"层":{"docs":{},",":{"docs":{},"给":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"加":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"端":{"docs":{},"口":{"docs":{},"号":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"加":{"docs":{},"端":{"docs":{},"口":{"docs":{},"号":{"docs":{},"的":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"和":{"docs":{},"加":{"docs":{},"了":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"端":{"docs":{},"口":{"docs":{},"的":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"使":{"docs":{},"用":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"有":{"docs":{},"层":{"docs":{},"次":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"身":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"也":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}},"动":{"docs":{},"包":{"docs":{},"装":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"加":{"docs":{},"载":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}},"己":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"带":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"解":{"docs":{},"析":{"docs":{},"配":{"docs":{},"置":{"docs":{},"生":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"类":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"出":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}}}},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"语":{"docs":{},"义":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"次":{"docs":{},"数":{"docs":{},"和":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},"间":{"docs":{},"监":{"docs":{},"控":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}},"的":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"基":{"docs":{},"础":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"链":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"它":{"docs":{},"有":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"本":{"docs":{},"地":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"远":{"docs":{},"程":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"能":{"docs":{},"一":{"docs":{},"个":{"docs":{},"集":{"docs":{},"群":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"后":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"其":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"拦":{"docs":{},"截":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":5.008130081300813}}}}}},"参":{"docs":{},"数":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"超":{"docs":{},"时":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"研":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"路":{"docs":{},"由":{"docs":{},"层":{"docs":{},":":{"docs":{},"封":{"docs":{},"装":{"docs":{},"多":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"路":{"docs":{},"由":{"docs":{},"及":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{},"并":{"docs":{},"桥":{"docs":{},"接":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5.014925373134329}}}}}},"转":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"或":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"现":{"docs":{},"转":{"docs":{},"成":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}},"为":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}},"换":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"为":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"(":{"docs":{},"如":{"docs":{},":":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},")":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}},"业":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"到":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"层":{"docs":{},":":{"docs":{},"封":{"docs":{},"将":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"各":{"docs":{},"种":{"docs":{},"协":{"docs":{},"议":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"动":{"docs":{},"态":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"集":{"docs":{},"群":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"通":{"docs":{},"讯":{"docs":{},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"及":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"传":{"docs":{},"输":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"地":{"docs":{},"址":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"端":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"用":{"docs":{},"上":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"核":{"docs":{},"心":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"没":{"docs":{},"有":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"配":{"docs":{},"置":{"docs":{},"层":{"docs":{},":":{"docs":{},"对":{"docs":{},"外":{"docs":{},"配":{"docs":{},"置":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"中":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"均":{"docs":{},"有":{"docs":{},"对":{"docs":{},"应":{"docs":{},"配":{"docs":{},"置":{"docs":{},"属":{"docs":{},"性":{"docs":{},"或":{"docs":{},"标":{"docs":{},"签":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"配":{"docs":{},"置":{"docs":{},"指":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"支":{"docs":{},"持":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},"等":{"docs":{},"。":{"docs":{},"产":{"docs":{},"品":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"从":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}},"和":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},"对":{"docs":{},"象":{"docs":{},"属":{"docs":{},"性":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"用":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}},"属":{"docs":{},"性":{"docs":{},"全":{"docs":{},"部":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"用":{"docs":{},"\"":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},"。":{"docs":{},"将":{"docs":{},"想":{"docs":{},"到":{"docs":{},"的":{"docs":{},"一":{"docs":{},"些":{"docs":{},"记":{"docs":{},"在":{"docs":{},"这":{"docs":{},",":{"docs":{},"备":{"docs":{},"忘":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"类":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}},"致":{"docs":{},"性":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"也":{"docs":{},"存":{"docs":{},"在":{"docs":{},"“":{"docs":{},"重":{"docs":{},"复":{"docs":{},"代":{"docs":{},"码":{"docs":{},"”":{"docs":{},",":{"docs":{},"也":{"docs":{},"存":{"docs":{},"在":{"docs":{},"“":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"与":{"docs":{},"精":{"docs":{},"化":{"docs":{},"”":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"会":{"docs":{},"比":{"docs":{},"较":{"docs":{},"方":{"docs":{},"便":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"树":{"docs":{},"结":{"docs":{},"构":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"表":{"docs":{},"现":{"docs":{},"力":{"docs":{},"更":{"docs":{},"强":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"非":{"docs":{},"常":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"是":{"docs":{},"一":{"docs":{},"些":{"docs":{},"离":{"docs":{},"散":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"值":{"docs":{},",":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"类":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"加":{"docs":{},"载":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"。":{"docs":{},"用":{"docs":{},"户":{"docs":{},"感":{"docs":{},"觉":{"docs":{},"非":{"docs":{},"常":{"docs":{},"不":{"docs":{},"便":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"中":{"docs":{},"进":{"docs":{},"行":{"docs":{},"了":{"docs":{},"合":{"docs":{},"并":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"放":{"docs":{},"到":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"从":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"也":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"学":{"docs":{},"习":{"docs":{},"成":{"docs":{},"本":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"向":{"docs":{},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"总":{"docs":{},"会":{"docs":{},"隐":{"docs":{},"含":{"docs":{},"一":{"docs":{},"些":{"docs":{},"风":{"docs":{},"格":{"docs":{},"或":{"docs":{},"潜":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"保":{"docs":{},"持":{"docs":{},"其":{"docs":{},"一":{"docs":{},"致":{"docs":{},"性":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"很":{"docs":{},"多":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"有":{"docs":{},"开":{"docs":{},"关":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"配":{"docs":{},"置":{"docs":{},"值":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"的":{"docs":{},"可":{"docs":{},"编":{"docs":{},"程":{"docs":{},"性":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"管":{"docs":{},"你":{"docs":{},"以":{"docs":{},"何":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"加":{"docs":{},"载":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"提":{"docs":{},"供":{"docs":{},"一":{"docs":{},"个":{"docs":{},"编":{"docs":{},"程":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"用":{"docs":{},"户":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"用":{"docs":{},"代":{"docs":{},"码":{"docs":{},"完":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"产":{"docs":{},"品":{"docs":{},",":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"是":{"docs":{},"组":{"docs":{},"件":{"docs":{},"类":{"docs":{},"产":{"docs":{},"品":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"和":{"docs":{},"其":{"docs":{},"它":{"docs":{},"产":{"docs":{},"品":{"docs":{},"协":{"docs":{},"作":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"集":{"docs":{},"成":{"docs":{},"你":{"docs":{},"的":{"docs":{},"产":{"docs":{},"品":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"需":{"docs":{},"要":{"docs":{},"适":{"docs":{},"配":{"docs":{},"配":{"docs":{},"置":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"普":{"docs":{},"遍":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"设":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{},"常":{"docs":{},"规":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"合":{"docs":{},"理":{"docs":{},"值":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"用":{"docs":{},"户":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"量":{"docs":{},"。":{"docs":{},"通":{"docs":{},"常":{"docs":{},"建":{"docs":{},"议":{"docs":{},"以":{"docs":{},"线":{"docs":{},"上":{"docs":{},"环":{"docs":{},"境":{"docs":{},"为":{"docs":{},"参":{"docs":{},"考":{"docs":{},"值":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},"适":{"docs":{},"应":{"docs":{},"。":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},"的":{"docs":{},"设":{"docs":{},"置":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"在":{"docs":{},"最":{"docs":{},"外":{"docs":{},"层":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"加":{"docs":{},"载":{"docs":{},"就":{"docs":{},"做":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{},"程":{"docs":{},"序":{"docs":{},"底":{"docs":{},"层":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"现":{"docs":{},"配":{"docs":{},"置":{"docs":{},"不":{"docs":{},"正":{"docs":{},"确":{"docs":{},",":{"docs":{},"就":{"docs":{},"应":{"docs":{},"该":{"docs":{},"直":{"docs":{},"接":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"容":{"docs":{},"错":{"docs":{},"在":{"docs":{},"最":{"docs":{},"外":{"docs":{},"层":{"docs":{},"做":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"底":{"docs":{},"层":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"发":{"docs":{},"现":{"docs":{},"配":{"docs":{},"置":{"docs":{},"值":{"docs":{},"不":{"docs":{},"合":{"docs":{},"理":{"docs":{},",":{"docs":{},"就":{"docs":{},"填":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"掩":{"docs":{},"盖":{"docs":{},"表":{"docs":{},"面":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"而":{"docs":{},"引":{"docs":{},"发":{"docs":{},"更":{"docs":{},"深":{"docs":{},"层":{"docs":{},"次":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"并":{"docs":{},"且":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"中":{"docs":{},"间":{"docs":{},"传":{"docs":{},"递":{"docs":{},"层":{"docs":{},",":{"docs":{},"很":{"docs":{},"可":{"docs":{},"能":{"docs":{},"并":{"docs":{},"不":{"docs":{},"知":{"docs":{},"道":{"docs":{},"底":{"docs":{},"层":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},",":{"docs":{},"一":{"docs":{},"些":{"docs":{},"中":{"docs":{},"间":{"docs":{},"的":{"docs":{},"检":{"docs":{},"测":{"docs":{},"条":{"docs":{},"件":{"docs":{},"就":{"docs":{},"可":{"docs":{},"能":{"docs":{},"失":{"docs":{},"效":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"继":{"docs":{},"承":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"覆":{"docs":{},"盖":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"设":{"docs":{},"计":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":5.005649717514125}}}},"进":{"docs":{},"行":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"集":{"docs":{},"成":{"docs":{},",":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"改":{"docs":{},"成":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"文":{"docs":{},"件":{"docs":{},"加":{"docs":{},"载":{"docs":{},"错":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"经":{"docs":{},"常":{"docs":{},"碰":{"docs":{},"到":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"用":{"docs":{},"户":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"和":{"docs":{},"你":{"docs":{},"说":{"docs":{},":":{"docs":{},"“":{"docs":{},"我":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"很":{"docs":{},"正":{"docs":{},"确":{"docs":{},"啊":{"docs":{},",":{"docs":{},"不":{"docs":{},"信":{"docs":{},"我":{"docs":{},"发":{"docs":{},"给":{"docs":{},"你":{"docs":{},"看":{"docs":{},"下":{"docs":{},",":{"docs":{},"但":{"docs":{},"就":{"docs":{},"是":{"docs":{},"报":{"docs":{},"错":{"docs":{},"”":{"docs":{},"。":{"docs":{},"然":{"docs":{},"后":{"docs":{},"查":{"docs":{},"一":{"docs":{},"圈":{"docs":{},"下":{"docs":{},"来":{"docs":{},",":{"docs":{},"原":{"docs":{},"来":{"docs":{},"他":{"docs":{},"发":{"docs":{},"过":{"docs":{},"来":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"根":{"docs":{},"本":{"docs":{},"没":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"平":{"docs":{},"台":{"docs":{},"很":{"docs":{},"多":{"docs":{},"产":{"docs":{},"品":{"docs":{},"都":{"docs":{},"会":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}},"标":{"docs":{},"准":{"docs":{},"格":{"docs":{},"式":{"docs":{},":":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"@":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},":":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"?":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"=":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"&":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"=":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"方":{"docs":{},"法":{"docs":{},"超":{"docs":{},"时":{"docs":{},"继":{"docs":{},"承":{"docs":{},"服":{"docs":{},"务":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"超":{"docs":{},"时":{"docs":{},"再":{"docs":{},"继":{"docs":{},"承":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"没":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"一":{"docs":{},"层":{"docs":{},"层":{"docs":{},"向":{"docs":{},"上":{"docs":{},"查":{"docs":{},"找":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"群":{"docs":{},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"将":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"伪":{"docs":{},"装":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":5.010416666666667}}}}},"合":{"docs":{},"容":{"docs":{},"量":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"中":{"docs":{},"非":{"docs":{},"常":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"设":{"docs":{},"计":{"docs":{},"思":{"docs":{},"路":{"docs":{},"都":{"docs":{},"是":{"docs":{},"向":{"docs":{},"它":{"docs":{},"靠":{"docs":{},"拢":{"docs":{},"。":{"docs":{},"这":{"docs":{},"就":{"docs":{},"使":{"docs":{},"得":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"\"":{"2":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"docs":{}}},"docs":{}}},"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.01601423487544484}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"$":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},".":{"docs":{},"\\":{"docs":{},"c":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.026690391459074734}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}},"o":{"docs":{},"k":{"docs":{},"!":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"2":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"先":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"造":{"docs":{},"轮":{"docs":{},"者":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"实":{"docs":{},"现":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"纯":{"docs":{},"文":{"docs":{},"本":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},":":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"n":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"称":{"docs":{},"为":{"docs":{},"幽":{"docs":{},"灵":{"docs":{},"连":{"docs":{},"接":{"docs":{},")":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.02631578947368421},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04020100502512563},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.028846153846153848},"impls/validation.html":{"ref":"impls/validation.html","tf":0.034482758620689655},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.044444444444444446}},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},",":{"docs":{},"多":{"docs":{},"好":{"docs":{},"的":{"docs":{},"同":{"docs":{},"学":{"docs":{},",":{"docs":{},"看":{"docs":{},"到":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"人":{"docs":{},"复":{"docs":{},"制":{"docs":{},"一":{"docs":{},"下":{"docs":{},"就":{"docs":{},"完":{"docs":{},"事":{"docs":{},"了":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"该":{"docs":{},"学":{"docs":{},"学":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"把":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"故":{"docs":{},"意":{"docs":{},"犯":{"docs":{},"一":{"docs":{},"遍":{"docs":{},",":{"docs":{},"看":{"docs":{},"看":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},"能":{"docs":{},"否":{"docs":{},"自":{"docs":{},"我":{"docs":{},"搞":{"docs":{},"定":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"\\":{"docs":{},"c":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"/":{"docs":{},"/":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.03508771929824561},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014245014245014245},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04020100502512563},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.028846153846153848},"impls/validation.html":{"ref":"impls/validation.html","tf":0.034482758620689655},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.044444444444444446},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},".":{"docs":{},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"*":{"docs":{},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.019943019943019943}}}},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}},"i":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}},"m":{"docs":{},"p":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}},"s":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"s":{"docs":{},"o":{"docs":{},"f":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}}}}},"=":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.021352313167259787}},"=":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.010676156583629894},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}},"@":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.019011406844106463},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02564102564102564}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}}}}},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010964912280701754},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"即":{"docs":{},"可":{"docs":{},"以":{"docs":{},"代":{"docs":{},"理":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"上":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"动":{"docs":{},"态":{"docs":{},"生":{"docs":{},"成":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"该":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"缓":{"docs":{},"存":{"docs":{},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}},"t":{"docs":{},")":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"增":{"docs":{},"加":{"docs":{},"一":{"docs":{},"种":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"通":{"docs":{},"过":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}},"e":{"docs":{},")":{"docs":{},"传":{"docs":{},"递":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"设":{"docs":{},"定":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"则":{"docs":{},"方":{"docs":{},"法":{"docs":{},"调":{"docs":{},"用":{"docs":{},"会":{"docs":{},"抛":{"docs":{},"出":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"在":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02564102564102564},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.02512562814070352},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304}},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"要":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}}}}}}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"{":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.039473684210526314},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.030418250950570342},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.041666666666666664},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.06532663316582915},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.042735042735042736},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.04411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.057692307692307696},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05747126436781609},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05555555555555555},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.033807829181494664},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}},"}":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}},"\"":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{}}}},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},"}":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}},"}":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.039473684210526314},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.03802281368821293},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.03125},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.07537688442211055},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.042735042735042736},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.04411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.057692307692307696},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05747126436781609},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05555555555555555},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.03558718861209965},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}},"一":{"docs":{},"些":{"docs":{},"操":{"docs":{},"作":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}},"设":{"docs":{},"计":{"docs":{},"上":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"常":{"docs":{},"识":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":5.005434782608695}}}}}}}}}}},"样":{"docs":{},"约":{"docs":{},"定":{"docs":{},"一":{"docs":{},"个":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"部":{"docs":{},"分":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"便":{"docs":{},"于":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"真":{"docs":{},"正":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"它":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},"主":{"docs":{},"要":{"docs":{},"是":{"docs":{},"用":{"docs":{},"于":{"docs":{},"从":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"有":{"docs":{},"子":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"类":{"docs":{},"型":{"docs":{},"信":{"docs":{},"息":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}},"要":{"docs":{},"控":{"docs":{},"制":{"docs":{},"外":{"docs":{},"部":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}},"管":{"docs":{},"选":{"docs":{},"哪":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"保":{"docs":{},"持":{"docs":{},"同":{"docs":{},"一":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"会":{"docs":{},"版":{"docs":{},"本":{"docs":{},"过":{"docs":{},"多":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"开":{"docs":{},"发":{"docs":{},"和":{"docs":{},"维":{"docs":{},"护":{"docs":{},"成":{"docs":{},"本":{"docs":{},"剧":{"docs":{},"增":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}},"再":{"docs":{},"开":{"docs":{},"发":{"docs":{},",":{"docs":{},"应":{"docs":{},"用":{"docs":{},"碰":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"会":{"docs":{},"一":{"docs":{},"次":{"docs":{},"性":{"docs":{},"实":{"docs":{},"例":{"docs":{},"化":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"所":{"docs":{},"有":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"很":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"用":{"docs":{},"上":{"docs":{},"也":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"会":{"docs":{},"很":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"资":{"docs":{},"源":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"执":{"docs":{},"行":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"装":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"同":{"docs":{},"时":{"docs":{},"接":{"docs":{},"收":{"docs":{},"事":{"docs":{},"件":{"docs":{},",":{"docs":{},"而":{"docs":{},"去":{"docs":{},"重":{"docs":{},"连":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"。":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"清":{"docs":{},"除":{"docs":{},"。":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"正":{"docs":{},"常":{"docs":{},"时":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"机":{"docs":{},"制":{"docs":{},"运":{"docs":{},"行":{"docs":{},"良":{"docs":{},"好":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"负":{"docs":{},"荷":{"docs":{},"高":{"docs":{},"时":{"docs":{},",":{"docs":{},"其":{"docs":{},"上":{"docs":{},"的":{"docs":{},"每":{"docs":{},"个":{"docs":{},"操":{"docs":{},"作":{"docs":{},"都":{"docs":{},"会":{"docs":{},"很":{"docs":{},"慢":{"docs":{},"。":{"docs":{},"这":{"docs":{},"就":{"docs":{},"出":{"docs":{},"现":{"docs":{},":":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"报":{"docs":{},"一":{"docs":{},"个":{"docs":{},"错":{"docs":{},",":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},"写":{"docs":{},"着":{"docs":{},":":{"docs":{},"请":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}},"火":{"docs":{},"速":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"动":{"docs":{},"生":{"docs":{},"成":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"(":{"docs":{},"通":{"docs":{},"过":{"docs":{},"字":{"docs":{},"节":{"docs":{},"码":{"docs":{},")":{"docs":{},",":{"docs":{},"并":{"docs":{},"将":{"docs":{},"其":{"docs":{},"实":{"docs":{},"例":{"docs":{},"注":{"docs":{},"入":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"值":{"docs":{},",":{"docs":{},"来":{"docs":{},"决":{"docs":{},"定":{"docs":{},"代":{"docs":{},"理":{"docs":{},"到":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"实":{"docs":{},"际":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}},"因":{"docs":{},"为":{"docs":{},"所":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"使":{"docs":{},"用":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"因":{"docs":{},"素":{"docs":{},"很":{"docs":{},"多":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"总":{"docs":{},"会":{"docs":{},"有":{"docs":{},"一":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"都":{"docs":{},"会":{"docs":{},"到":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"线":{"docs":{},"上":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"测":{"docs":{},"试":{"docs":{},"环":{"docs":{},"境":{"docs":{},"可":{"docs":{},"能":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"不":{"docs":{},"可":{"docs":{},"能":{"docs":{},"去":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"改":{"docs":{},"为":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"相":{"docs":{},"关":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"里":{"docs":{},"也":{"docs":{},"是":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"对":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"原":{"docs":{},"始":{"docs":{},"核":{"docs":{},"心":{"docs":{},"概":{"docs":{},"念":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"加":{"docs":{},"载":{"docs":{},"失":{"docs":{},"败":{"docs":{},",":{"docs":{},"连":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"都":{"docs":{},"拿":{"docs":{},"不":{"docs":{},"到":{"docs":{},"了":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"j":{"docs":{},"d":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"种":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"需":{"docs":{},"通":{"docs":{},"知":{"docs":{},"一":{"docs":{},"个":{"docs":{},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"y":{"docs":{},"协":{"docs":{},"议":{"docs":{},"并":{"docs":{},"带":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"性":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"个":{"docs":{},"类":{"docs":{},"可":{"docs":{},"以":{"docs":{},"成":{"docs":{},"为":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},"(":{"docs":{},"i":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}},"是":{"docs":{},"d":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"的":{"docs":{},"持":{"docs":{},"久":{"docs":{},"存":{"docs":{},"储":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"找":{"docs":{},"不":{"docs":{},"到":{"docs":{},"注":{"docs":{},"册":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"则":{"docs":{},"抛":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"新":{"docs":{},"增":{"docs":{},"工":{"docs":{},"程":{"docs":{},",":{"docs":{},"黑":{"docs":{},"盒":{"docs":{},"依":{"docs":{},"赖":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}}}}}},"改":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"没":{"docs":{},"有":{"docs":{},"订":{"docs":{},"阅":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}},"不":{"docs":{},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"或":{"docs":{},"需":{"docs":{},"要":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"或":{"docs":{},"瞬":{"docs":{},"时":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"不":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}}}},"能":{"docs":{},",":{"docs":{},"给":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"和":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{},"这":{"docs":{},"让":{"docs":{},"维":{"docs":{},"护":{"docs":{},"和":{"docs":{},"问":{"docs":{},"题":{"docs":{},"解":{"docs":{},"决":{"docs":{},"变":{"docs":{},"得":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"寻":{"docs":{},"求":{"docs":{},"精":{"docs":{},"通":{"docs":{},"者":{"docs":{},"(":{"docs":{},"往":{"docs":{},"往":{"docs":{},"是":{"docs":{},"实":{"docs":{},"现":{"docs":{},"者":{"docs":{},")":{"docs":{},"的":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"要":{"docs":{},"写":{"docs":{},"个":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"那":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"要":{"docs":{},"写":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"原":{"docs":{},"封":{"docs":{},"不":{"docs":{},"动":{"docs":{},",":{"docs":{},"同":{"docs":{},"步":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},",":{"docs":{},"在":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"确":{"docs":{},"保":{"docs":{},"进":{"docs":{},"入":{"docs":{},"集":{"docs":{},"合":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"是":{"docs":{},"可":{"docs":{},"控":{"docs":{},"的":{"docs":{},"且":{"docs":{},"是":{"docs":{},"足":{"docs":{},"够":{"docs":{},"少":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"心":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"这":{"docs":{},"是":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"有":{"docs":{},"有":{"docs":{},"界":{"docs":{},"的":{"docs":{},"集":{"docs":{},"合":{"docs":{},"。":{"docs":{},"当":{"docs":{},"到":{"docs":{},"达":{"docs":{},"界":{"docs":{},"限":{"docs":{},"时":{"docs":{},",":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"丢":{"docs":{},"弃":{"docs":{},"策":{"docs":{},"略":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"m":{"docs":{},"f":{"docs":{},"规":{"docs":{},"范":{"docs":{},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{},"名":{"docs":{},"获":{"docs":{},"取":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},",":{"docs":{},"就":{"docs":{},"表":{"docs":{},"示":{"docs":{},"重":{"docs":{},"复":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"都":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"整":{"docs":{},"个":{"docs":{},"列":{"docs":{},"表":{"docs":{},"(":{"docs":{},"优":{"docs":{},"先":{"docs":{},"从":{"docs":{},"没":{"docs":{},"有":{"docs":{},"选":{"docs":{},"过":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"选":{"docs":{},"择":{"docs":{},")":{"docs":{},",":{"docs":{},"判":{"docs":{},"断":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"(":{"docs":{},"选":{"docs":{},"择":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"到":{"docs":{},"可":{"docs":{},"用":{"docs":{},"状":{"docs":{},"态":{"docs":{},")":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},",":{"docs":{},"则":{"docs":{},"进":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"调":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"步":{"docs":{},"选":{"docs":{},"择":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"从":{"docs":{},"剩":{"docs":{},"余":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"继":{"docs":{},"续":{"docs":{},"选":{"docs":{},"择":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"调":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"三":{"docs":{},"步":{"docs":{},"没":{"docs":{},"有":{"docs":{},"选":{"docs":{},"择":{"docs":{},"出":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},",":{"docs":{},"会":{"docs":{},"选":{"docs":{},"第":{"docs":{},"一":{"docs":{},"步":{"docs":{},"选":{"docs":{},"出":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"家":{"docs":{},"有":{"docs":{},"兴":{"docs":{},"趣":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"一":{"docs":{},"起":{"docs":{},"研":{"docs":{},"究":{"docs":{},",":{"docs":{},"和":{"docs":{},"行":{"docs":{},"知":{"docs":{},"一":{"docs":{},"块":{"docs":{},"讨":{"docs":{},"论":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},"准":{"docs":{},"备":{"docs":{},"一":{"docs":{},"个":{"docs":{},"标":{"docs":{},"志":{"docs":{},",":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},"后":{"docs":{},"打":{"docs":{},"日":{"docs":{},"志":{"docs":{},"后":{"docs":{},"设":{"docs":{},"置":{"docs":{},"标":{"docs":{},"志":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"打":{"docs":{},"日":{"docs":{},"志":{"docs":{},"。":{"docs":{},"问":{"docs":{},"题":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"后":{"docs":{},"清":{"docs":{},"除":{"docs":{},"标":{"docs":{},"志":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"没":{"docs":{},"有":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"如":{"docs":{},"没":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"当":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},"上":{"docs":{},"面":{"docs":{},"执":{"docs":{},"行":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"配":{"docs":{},"置":{"docs":{},"了":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"参":{"docs":{},"数":{"docs":{},"为":{"docs":{},"有":{"docs":{},"效":{"docs":{},"值":{"docs":{},"时":{"docs":{},"激":{"docs":{},"活":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"配":{"docs":{},"了":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"=":{"docs":{},"\"":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"\"":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"激":{"docs":{},"活":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"中":{"docs":{},"有":{"docs":{},"设":{"docs":{},"置":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"时":{"docs":{},",":{"docs":{},"连":{"docs":{},"接":{"docs":{},"失":{"docs":{},"败":{"docs":{},"不":{"docs":{},"能":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"需":{"docs":{},"内":{"docs":{},"部":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"置":{"docs":{},"了":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"时":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"分":{"docs":{},"类":{"docs":{},"存":{"docs":{},"储":{"docs":{},",":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"类":{"docs":{},"别":{"docs":{},"为":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{},"可":{"docs":{},"按":{"docs":{},"分":{"docs":{},"类":{"docs":{},"部":{"docs":{},"分":{"docs":{},"通":{"docs":{},"知":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"只":{"docs":{},"通":{"docs":{},"知":{"docs":{},"指":{"docs":{},"定":{"docs":{},"分":{"docs":{},"类":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"分":{"docs":{},"类":{"docs":{},"用":{"docs":{},"逗":{"docs":{},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{},",":{"docs":{},"并":{"docs":{},"允":{"docs":{},"许":{"docs":{},"星":{"docs":{},"号":{"docs":{},"通":{"docs":{},"配":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"所":{"docs":{},"有":{"docs":{},"分":{"docs":{},"类":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"时":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"失":{"docs":{},"败":{"docs":{},"后":{"docs":{},"不":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"在":{"docs":{},"后":{"docs":{},"台":{"docs":{},"定":{"docs":{},"时":{"docs":{},"重":{"docs":{},"试":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"失":{"docs":{},"败":{"docs":{},"后":{"docs":{},"不":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"在":{"docs":{},"后":{"docs":{},"台":{"docs":{},"定":{"docs":{},"时":{"docs":{},"重":{"docs":{},"试":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"持":{"docs":{},"久":{"docs":{},"存":{"docs":{},"储":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},",":{"docs":{},"当":{"docs":{},"注":{"docs":{},"册":{"docs":{},"者":{"docs":{},"出":{"docs":{},"现":{"docs":{},"断":{"docs":{},"电":{"docs":{},"等":{"docs":{},"情":{"docs":{},"况":{"docs":{},"异":{"docs":{},"常":{"docs":{},"退":{"docs":{},"出":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"自":{"docs":{},"动":{"docs":{},"删":{"docs":{},"除":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"出":{"docs":{},"错":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"端":{"docs":{},"口":{"docs":{},"已":{"docs":{},"占":{"docs":{},"用":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"户":{"docs":{},"调":{"docs":{},"用":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},"所":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"时":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"需":{"docs":{},"相":{"docs":{},"应":{"docs":{},"执":{"docs":{},"行":{"docs":{},"同":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"远":{"docs":{},"端":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"连":{"docs":{},"接":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"失":{"docs":{},"败":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}},"有":{"docs":{},"服":{"docs":{},"务":{"docs":{},"引":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"触":{"docs":{},"发":{"docs":{},"该":{"docs":{},"事":{"docs":{},"件":{"docs":{},"。":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"时":{"docs":{},",":{"docs":{},"触":{"docs":{},"发":{"docs":{},"该":{"docs":{},"事":{"docs":{},"件":{"docs":{},"。":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"组":{"docs":{},"织":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"并":{"docs":{},"伪":{"docs":{},"装":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"。":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"收":{"docs":{},"到":{"docs":{},"服":{"docs":{},"务":{"docs":{},"变":{"docs":{},"更":{"docs":{},"通":{"docs":{},"知":{"docs":{},"时":{"docs":{},"触":{"docs":{},"发":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"重":{"docs":{},"启":{"docs":{},",":{"docs":{},"网":{"docs":{},"络":{"docs":{},"抖":{"docs":{},"动":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"丢":{"docs":{},"失":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"断":{"docs":{},"线":{"docs":{},"自":{"docs":{},"动":{"docs":{},"删":{"docs":{},"除":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"请":{"docs":{},"求":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"置":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"时":{"docs":{},"表":{"docs":{},"示":{"docs":{},"不":{"docs":{},"检":{"docs":{},"查":{"docs":{},"连":{"docs":{},"接":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"在":{"docs":{},"连":{"docs":{},"接":{"docs":{},"不":{"docs":{},"上":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"停":{"docs":{},"机":{"docs":{},"时":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"与":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"创":{"docs":{},"建":{"docs":{},"代":{"docs":{},"理":{"docs":{},"时":{"docs":{},",":{"docs":{},"暂":{"docs":{},"不":{"docs":{},"建":{"docs":{},"立":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"加":{"docs":{},"载":{"docs":{"SPI.html":{"ref":"SPI.html","tf":5.00219298245614}},"扩":{"docs":{},"展":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5.016949152542373}}}}}},"发":{"docs":{},"现":{"docs":{},"机":{"docs":{},"制":{"docs":{},"加":{"docs":{},"强":{"docs":{},"而":{"docs":{},"来":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"调":{"docs":{},"用":{"docs":{},"会":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"参":{"docs":{},"数":{"docs":{},"(":{"docs":{},"或":{"docs":{},"是":{"docs":{},"参":{"docs":{},"数":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"成":{"docs":{},"员":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}},"特":{"docs":{},"性":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"代":{"docs":{},"码":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"加":{"docs":{},"载":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"自":{"docs":{},"动":{"docs":{},"包":{"docs":{},"装":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"激":{"docs":{},"活":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"装":{"docs":{},"配":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"适":{"docs":{},"应":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"配":{"docs":{},"置":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"进":{"docs":{},"行":{"docs":{},"暴":{"docs":{},"露":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"都":{"docs":{},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"套":{"docs":{},"上":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},",":{"docs":{},"伪":{"docs":{},"装":{"docs":{},"成":{"docs":{},"单":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"加":{"docs":{},"载":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"可":{"docs":{},"从":{"docs":{},"不":{"docs":{},"同":{"docs":{},"容":{"docs":{},"器":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"组":{"docs":{},"合":{"docs":{},"将":{"docs":{},"关":{"docs":{},"系":{"docs":{},"由":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"基":{"docs":{},"类":{"docs":{},"与":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"重":{"docs":{},"构":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":5.004149377593361}}}},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"功":{"docs":{},"能":{"docs":{},"插":{"docs":{},"件":{"docs":{},"。":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.16666666666666666}}}}}}},"实":{"docs":{},"现":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.4999999999999996}}}},"接":{"docs":{},"口":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"仅":{"docs":{},"用":{"docs":{},"于":{"docs":{},"系":{"docs":{},"统":{"docs":{},"集":{"docs":{},"成":{"docs":{},",":{"docs":{},"或":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.16666666666666666}}}}}}}}}}},"。":{"docs":{},"框":{"docs":{},"架":{"docs":{},"如":{"docs":{},"果":{"docs":{},"让":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"或":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"把":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},"职":{"docs":{},"责":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"单":{"docs":{},"一":{"docs":{},",":{"docs":{},"具":{"docs":{},"有":{"docs":{},"可":{"docs":{},"组":{"docs":{},"合":{"docs":{},"性":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"说":{"docs":{},"明":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"配":{"docs":{},"置":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"协":{"docs":{},"议":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"策":{"docs":{},"略":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"等":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"通":{"docs":{},"常":{"docs":{},"对":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"聚":{"docs":{},"合":{"docs":{},"要":{"docs":{},"求":{"docs":{},"比":{"docs":{},"较":{"docs":{},"高":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"产":{"docs":{},"品":{"docs":{},"需":{"docs":{},"要":{"docs":{},"发":{"docs":{},"现":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"加":{"docs":{},"入":{"docs":{},"产":{"docs":{},"品":{"docs":{},"内":{"docs":{},"部":{"docs":{},"。":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"契":{"docs":{},"约":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"在":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扫":{"docs":{},"描":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"所":{"docs":{},"有":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"到":{"docs":{},"所":{"docs":{},"有":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"持":{"docs":{},"有":{"docs":{},"了":{"docs":{},"实":{"docs":{},"际":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"方":{"docs":{},"法":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"操":{"docs":{},"作":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"调":{"docs":{},"用":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}},"名":{"docs":{},"的":{"docs":{},"点":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"串":{"docs":{},"。":{"docs":{},"即":{"docs":{},"对":{"docs":{},"于":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{},"业":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}},"中":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"做":{"docs":{},"渲":{"docs":{},"染":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"叫":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"混":{"docs":{},"在":{"docs":{},"了":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"给":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"控":{"docs":{},"制":{"docs":{},"输":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},",":{"docs":{},"方":{"docs":{},"法":{"docs":{},"名":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"过":{"docs":{},"去":{"docs":{},"式":{"docs":{},"的":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"有":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"里":{"docs":{},"面":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"用":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}},"改":{"docs":{},"进":{"docs":{},"了":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"成":{"docs":{},":":{"docs":{},"(":{"docs":{},"链":{"docs":{},"式":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"器":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"如":{"docs":{},"提":{"docs":{},"取":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"来":{"docs":{},"判":{"docs":{},"定":{"docs":{},"其":{"docs":{},"成":{"docs":{},"员":{"docs":{},"。":{"docs":{},"即":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},",":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"基":{"docs":{},"于":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"它":{"docs":{},"主":{"docs":{},"要":{"docs":{},"是":{"docs":{},"打":{"docs":{},"开":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"得":{"docs":{},"到":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"打":{"docs":{},"开":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"口":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"是":{"docs":{},"给":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"用":{"docs":{},"来":{"docs":{},"写":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"的":{"docs":{},"。":{"docs":{},"然":{"docs":{},"后":{"docs":{},",":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"决":{"docs":{},"定":{"docs":{},"什":{"docs":{},"么":{"docs":{},"时":{"docs":{},"候":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"其":{"docs":{},"它":{"docs":{},"正":{"docs":{},"常":{"docs":{},"业":{"docs":{},"务":{"docs":{},"上":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"也":{"docs":{},"不":{"docs":{},"用":{"docs":{},"变":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"生":{"docs":{},"成":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"时":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"需":{"docs":{},"相":{"docs":{},"应":{"docs":{},"执":{"docs":{},"行":{"docs":{},"同":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"式":{"docs":{},",":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"管":{"docs":{},"理":{"docs":{},"插":{"docs":{},"件":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"无":{"docs":{},"条":{"docs":{},"件":{"docs":{},"自":{"docs":{},"动":{"docs":{},"激":{"docs":{},"活":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"时":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"注":{"docs":{},"入":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"累":{"docs":{},"加":{"docs":{},"所":{"docs":{},"有":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"需":{"docs":{},"要":{"docs":{},"判":{"docs":{},"断":{"docs":{},"是":{"docs":{},"否":{"docs":{},"是":{"docs":{},"回":{"docs":{},"调":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"回":{"docs":{},"调":{"docs":{},",":{"docs":{},"会":{"docs":{},"从":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"不":{"docs":{},"能":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"连":{"docs":{},"接":{"docs":{},"。":{"docs":{},"在":{"docs":{},"实":{"docs":{},"现":{"docs":{},"中":{"docs":{},"采":{"docs":{},"用":{"docs":{},"了":{"docs":{},"引":{"docs":{},"用":{"docs":{},"计":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"案":{"docs":{},",":{"docs":{},"但":{"docs":{},"为":{"docs":{},"了":{"docs":{},"防":{"docs":{},"范":{"docs":{},",":{"docs":{},"在":{"docs":{},"连":{"docs":{},"接":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"时":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"建":{"docs":{},"立":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"大":{"docs":{},"多":{"docs":{},"功":{"docs":{},"能":{"docs":{},"均":{"docs":{},"基":{"docs":{},"于":{"docs":{},"此":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"远":{"docs":{},"程":{"docs":{},"方":{"docs":{},"法":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"该":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"都":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"。":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"章":{"docs":{},"节":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{},"摘":{"docs":{},"录":{"docs":{},"自":{"docs":{},"梁":{"docs":{},"飞":{"docs":{},"在":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":0.25}}}}}}}}}}}}}}},"地":{"docs":{},"部":{"docs":{},"署":{"docs":{},"代":{"docs":{},"理":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"标":{"docs":{},"准":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"服":{"docs":{},"务":{"docs":{},"发":{"docs":{},"现":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"即":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}},"签":{"docs":{},"解":{"docs":{},"析":{"docs":{},"为":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"识":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"保":{"docs":{},"持":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"值":{"docs":{},"则":{"docs":{},"找":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"配":{"docs":{},"置":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"l":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"离":{"docs":{},"的":{"docs":{},"反":{"docs":{},"面":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"被":{"docs":{},"启":{"docs":{},"动":{"docs":{},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"完":{"docs":{},"全":{"docs":{},"分":{"docs":{},"开":{"docs":{},",":{"docs":{},"全":{"docs":{},"由":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}},"约":{"docs":{},"定":{"docs":{"coding.html":{"ref":"coding.html","tf":0.022727272727272728},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}},"脚":{"docs":{},"本":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"报":{"docs":{},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"之":{"docs":{},"前":{"docs":{},"调":{"docs":{},"用":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"获":{"docs":{},"取":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},"工":{"docs":{},"具":{"docs":{},"类":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}},"路":{"docs":{},"由":{"docs":{},"器":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}},"返":{"docs":{},"回":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"包":{"docs":{},"装":{"docs":{},"在":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"外":{"docs":{},"。":{"docs":{},"即":{"docs":{},"从":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"命":{"docs":{},"令":{"docs":{},"。":{"docs":{},"查":{"docs":{},"询":{"docs":{},"方":{"docs":{},"法":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"幂":{"docs":{},"等":{"docs":{},"性":{"docs":{},"的":{"docs":{},",":{"docs":{},"无":{"docs":{},"副":{"docs":{},"作":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"不":{"docs":{},"改":{"docs":{},"变":{"docs":{},"任":{"docs":{},"何":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"调":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"为":{"docs":{},"空":{"docs":{},"返":{"docs":{},"回":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}},"从":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"release.html":{"ref":"release.html","tf":0.014084507042253521}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"发":{"docs":{},"现":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"者":{"docs":{},"方":{"docs":{},"中":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"进":{"docs":{},"行":{"docs":{},"调":{"docs":{},"用":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}},"。":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}},"文":{"docs":{},"件":{"docs":{},"加":{"docs":{},"载":{"docs":{},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"侦":{"docs":{},"听":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"并":{"docs":{},"接":{"docs":{},"收":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"发":{"docs":{},"来":{"docs":{},"的":{"docs":{},"各":{"docs":{},"种":{"docs":{},"请":{"docs":{},"求":{"docs":{},",":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"细":{"docs":{},"节":{"docs":{},"由":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}},"再":{"docs":{},"重":{"docs":{},"新":{"docs":{},"传":{"docs":{},"给":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"再":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},",":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"一":{"docs":{},"个":{"docs":{},"对":{"docs":{},"象":{"docs":{},"发":{"docs":{},"过":{"docs":{},"去":{"docs":{},"就":{"docs":{},"行":{"docs":{},"。":{"docs":{},"后":{"docs":{},"来":{"docs":{},"有":{"docs":{},"了":{"docs":{},"同":{"docs":{},"步":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"最":{"docs":{},"开":{"docs":{},"始":{"docs":{},",":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"都":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"接":{"docs":{},"口":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"透":{"docs":{},"明":{"docs":{},"化":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"就":{"docs":{},"是":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"协":{"docs":{},"议":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"可":{"docs":{},"能":{"docs":{},"只":{"docs":{},"是":{"docs":{},"想":{"docs":{},"替":{"docs":{},"换":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"只":{"docs":{},"替":{"docs":{},"换":{"docs":{},"传":{"docs":{},"输":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"现":{"docs":{},"有":{"docs":{},"的":{"docs":{},":":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"过":{"docs":{},"程":{"docs":{},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"参":{"docs":{},"数":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"中":{"docs":{},"的":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"查":{"docs":{},"询":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"验":{"docs":{},"证":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}},",":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}},"或":{"docs":{},"者":{"docs":{},"像":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"回":{"docs":{},"调":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"(":{"docs":{},"整":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"网":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},")":{"docs":{},"。":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"即":{"docs":{},"是":{"docs":{},"从":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}},"见":{"docs":{},":":{"docs":{},"谈":{"docs":{},"谈":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"c":{"docs":{},"d":{"docs":{},"i":{"docs":{},"/":{"docs":{},"t":{"docs":{},"c":{"docs":{},"k":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"1":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}},"现":{"docs":{},"自":{"docs":{},"己":{"docs":{},"数":{"docs":{},"据":{"docs":{},"被":{"docs":{},"删":{"docs":{},"除":{"docs":{},"时":{"docs":{},"(":{"docs":{},"写":{"docs":{},"入":{"docs":{},"失":{"docs":{},"败":{"docs":{},")":{"docs":{},",":{"docs":{},"选":{"docs":{},"择":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"段":{"docs":{},"时":{"docs":{},"间":{"docs":{},"再":{"docs":{},"重":{"docs":{},"试":{"docs":{},"。":{"docs":{},"重":{"docs":{},"试":{"docs":{},"时":{"docs":{},"间":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"指":{"docs":{},"数":{"docs":{},"级":{"docs":{},"增":{"docs":{},"长":{"docs":{},",":{"docs":{},"如":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"等":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"没":{"docs":{},"有":{"docs":{},"了":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"写":{"docs":{},"入":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"反":{"docs":{},"复":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"这":{"docs":{},"些":{"docs":{},"反":{"docs":{},"复":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"又":{"docs":{},"加":{"docs":{},"重":{"docs":{},"了":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"的":{"docs":{},"负":{"docs":{},"荷":{"docs":{},",":{"docs":{},"恶":{"docs":{},"化":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}},"问":{"docs":{},"题":{"docs":{},"、":{"docs":{},"添":{"docs":{},"加":{"docs":{},"测":{"docs":{},"试":{"docs":{},"(":{"docs":{},"集":{"docs":{},"成":{"docs":{},"测":{"docs":{},"试":{"docs":{},")":{"docs":{},"复":{"docs":{},"现":{"docs":{},"总":{"docs":{},"是":{"docs":{},";":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}}}}}}}}}}}}},"布":{"docs":{},"前":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"名":{"docs":{},"称":{"docs":{},"空":{"docs":{},"间":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"回":{"docs":{},"调":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},";":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"docs":{}}}}}},"向":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"前":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"很":{"docs":{},"好":{"docs":{},"办":{"docs":{},",":{"docs":{},"你":{"docs":{},"只":{"docs":{},"要":{"docs":{},"保":{"docs":{},"证":{"docs":{},"配":{"docs":{},"置":{"docs":{},"只":{"docs":{},"增":{"docs":{},"不":{"docs":{},"减":{"docs":{},",":{"docs":{},"就":{"docs":{},"基":{"docs":{},"本":{"docs":{},"上":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},"向":{"docs":{},"前":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"。":{"docs":{},"但":{"docs":{},"向":{"docs":{},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},",":{"docs":{},"要":{"docs":{},"为":{"docs":{},"后":{"docs":{},"续":{"docs":{},"加":{"docs":{},"入":{"docs":{},"新":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"做":{"docs":{},"好":{"docs":{},"准":{"docs":{},"备":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"配":{"docs":{},"置":{"docs":{},"出":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"就":{"docs":{},"应":{"docs":{},"该":{"docs":{},"为":{"docs":{},"这":{"docs":{},"个":{"docs":{},"“":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"”":{"docs":{},"情":{"docs":{},"况":{"docs":{},"约":{"docs":{},"定":{"docs":{},"一":{"docs":{},"个":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"个":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"很":{"docs":{},"有":{"docs":{},"可":{"docs":{},"能":{"docs":{},"在":{"docs":{},"以":{"docs":{},"后":{"docs":{},"还":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"是":{"docs":{},"保":{"docs":{},"存":{"docs":{},"“":{"docs":{},"服":{"docs":{},"务":{"docs":{},"=":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"映":{"docs":{},"射":{"docs":{},"关":{"docs":{},"系":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{},"有":{"docs":{},"一":{"docs":{},"行":{"docs":{},"特":{"docs":{},"殊":{"docs":{},",":{"docs":{},"保":{"docs":{},"存":{"docs":{},"的":{"docs":{},"是":{"docs":{},"“":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"=":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"。":{"docs":{},"现":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},",":{"docs":{},"约":{"docs":{},"定":{"docs":{},"“":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"”":{"docs":{},"这":{"docs":{},"个":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"是":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"的":{"docs":{},",":{"docs":{},"做":{"docs":{},"特":{"docs":{},"别":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"都":{"docs":{},"是":{"docs":{},"“":{"docs":{},"服":{"docs":{},"务":{"docs":{},"”":{"docs":{},"。":{"docs":{},"然":{"docs":{},"而":{"docs":{},",":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"要":{"docs":{},"加":{"docs":{},"一":{"docs":{},"项":{"docs":{},"“":{"docs":{},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},"=":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},",":{"docs":{},"旧":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"会":{"docs":{},"把":{"docs":{},"“":{"docs":{},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},"”":{"docs":{},"做":{"docs":{},"为":{"docs":{},"“":{"docs":{},"服":{"docs":{},"务":{"docs":{},"”":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"旧":{"docs":{},"代":{"docs":{},"码":{"docs":{},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"改":{"docs":{},"的":{"docs":{},",":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},"就":{"docs":{},"很":{"docs":{},"会":{"docs":{},"很":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"先":{"docs":{},"前":{"docs":{},"约":{"docs":{},"定":{"docs":{},"“":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"标":{"docs":{},"识":{"docs":{},"+":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"”":{"docs":{},"为":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"后":{"docs":{},"续":{"docs":{},"就":{"docs":{},"会":{"docs":{},"方":{"docs":{},"便":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"多":{"docs":{},"向":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"5":{"docs":{},"学":{"docs":{},"习":{"docs":{},",":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"5":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"理":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"服":{"docs":{},"务":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"的":{"docs":{},"关":{"docs":{},"键":{"docs":{},"就":{"docs":{},"在":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}},",":{"docs":{},"会":{"docs":{},"话":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}},"于":{"docs":{},"可":{"docs":{},"用":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"则":{"docs":{},"进":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"调":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"属":{"docs":{},"性":{"docs":{},"转":{"docs":{},"成":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"底":{"docs":{},"层":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"这":{"docs":{},"就":{"docs":{},"省":{"docs":{},"了":{"docs":{},"不":{"docs":{},"少":{"docs":{},"工":{"docs":{},"作":{"docs":{},"量":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"渗":{"docs":{},"透":{"docs":{},"在":{"docs":{},"整":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"代":{"docs":{},"码":{"docs":{},"里":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"刚":{"docs":{},"开":{"docs":{},"始":{"docs":{},"接":{"docs":{},"触":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"满":{"docs":{},"眼":{"docs":{},"都":{"docs":{},"是":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"然":{"docs":{},"后":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"生":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"的":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}},"由":{"docs":{},"于":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"开":{"docs":{},"发":{"docs":{},"只":{"docs":{},"会":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"议":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"通":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"此":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"传":{"docs":{},"入":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"心":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"插":{"docs":{},"件":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"构":{"docs":{},"成":{"docs":{},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},",":{"docs":{},"核":{"docs":{},"心":{"docs":{},"不":{"docs":{},"包":{"docs":{},"括":{"docs":{},"任":{"docs":{},"何":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"确":{"docs":{},"保":{"docs":{},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"能":{"docs":{},"被":{"docs":{},"替":{"docs":{},"换":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"作":{"docs":{},"者":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"也":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},",":{"docs":{},"以":{"docs":{},"保":{"docs":{},"证":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"自":{"docs":{},"身":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"也":{"docs":{},"要":{"docs":{},"用":{"docs":{},"插":{"docs":{},"件":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"硬":{"docs":{},"编":{"docs":{},"码":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"直":{"docs":{},"连":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"扫":{"docs":{},"某":{"docs":{},"个":{"docs":{},"指":{"docs":{},"定":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},"允":{"docs":{},"许":{"docs":{},"指":{"docs":{},"定":{"docs":{},"配":{"docs":{},"置":{"docs":{},"路":{"docs":{},"径":{"docs":{},"。":{"docs":{},"做":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"做":{"docs":{},"到":{"docs":{},"凡":{"docs":{},"是":{"docs":{},"能":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"做":{"docs":{},"的":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"编":{"docs":{},"程":{"docs":{},"方":{"docs":{},"式":{"docs":{},"进":{"docs":{},"行":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"当":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"你":{"docs":{},"的":{"docs":{},"框":{"docs":{},"架":{"docs":{},"与":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"框":{"docs":{},"架":{"docs":{},"集":{"docs":{},"成":{"docs":{},"时":{"docs":{},"就":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"很":{"docs":{},"多":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"接":{"docs":{},"使":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"绕":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"增":{"docs":{},"加":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"按":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"部":{"docs":{},"署":{"docs":{},"情":{"docs":{},"况":{"docs":{},"做":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"派":{"docs":{},"发":{"docs":{},"模":{"docs":{},"型":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"池":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5.016666666666667}}}},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"和":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"组":{"docs":{},"装":{"docs":{},"成":{"docs":{},"链":{"docs":{},",":{"docs":{},"在":{"docs":{},"链":{"docs":{},"的":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"节":{"docs":{},"调":{"docs":{},"用":{"docs":{},"真":{"docs":{},"实":{"docs":{},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},",":{"docs":{},"在":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"和":{"docs":{},"引":{"docs":{},"用":{"docs":{},"前":{"docs":{},"后":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"回":{"docs":{},"调":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"网":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":5.016949152542373}}}}},"合":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"指":{"docs":{},":":{"docs":{},"将":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"正":{"docs":{},"交":{"docs":{},"分":{"docs":{},"解":{"docs":{},",":{"docs":{},"取":{"docs":{},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"交":{"docs":{},"集":{"docs":{},",":{"docs":{},"新":{"docs":{},"加":{"docs":{},"功":{"docs":{},"能":{"docs":{},"总":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"之":{"docs":{},"上":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"解":{"docs":{},"析":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},"属":{"docs":{},"性":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"适":{"docs":{},"应":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}},"配":{"docs":{},"对":{"docs":{},",":{"docs":{},"采":{"docs":{},"用":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"自":{"docs":{},"然":{"docs":{},"想":{"docs":{},"到":{"docs":{},",":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"其":{"docs":{},"实":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"没":{"docs":{},"有":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"选":{"docs":{},"择":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"选":{"docs":{},"择":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"程":{"docs":{},"间":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"等":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"度":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"里":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"些":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.07224334600760456},"impls/registry.html":{"ref":"impls/registry.html","tf":0.18518518518518517}},"/":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.019943019943019943}}}},"|":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.04182509505703422},"impls/filter.html":{"ref":"impls/filter.html","tf":0.07317073170731707},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.125},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.125},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.09375},"impls/router.html":{"ref":"impls/router.html","tf":0.13432835820895522},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.12857142857142856},"impls/merger.html":{"ref":"impls/merger.html","tf":0.15254237288135594},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.11764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.15254237288135594},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.1111111111111111},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.14754098360655737},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.14516129032258066},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.15},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.12087912087912088},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.05527638190954774},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.09401709401709402},"impls/networker.html":{"ref":"impls/networker.html","tf":0.15254237288135594},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.10588235294117647},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.1267605633802817},"impls/container.html":{"ref":"impls/container.html","tf":0.1323529411764706},"impls/page.html":{"ref":"impls/page.html","tf":0.14754098360655737},"impls/cache.html":{"ref":"impls/cache.html","tf":0.08653846153846154},"impls/validation.html":{"ref":"impls/validation.html","tf":0.10344827586206896},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.1},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"a":{"docs":{},"w":{"docs":{},"k":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"|":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}},"其":{"docs":{},"中":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"实":{"docs":{},"是":{"docs":{},"包":{"docs":{},"装":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}},"文":{"docs":{},"档":{"docs":{},"化":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"已":{"docs":{},"知":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}},"注":{"docs":{},"册":{"docs":{},"信":{"docs":{},"息":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"含":{"docs":{},"义":{"docs":{},"同":{"docs":{},"{":{"docs":{},"@":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}},"总":{"docs":{},"不":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"含":{"docs":{},"义":{"docs":{},"同":{"docs":{},"{":{"docs":{},"@":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}},"认":{"docs":{},"领":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"先":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"后":{"docs":{},"。":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018}}}},"间":{"docs":{},"的":{"docs":{},"网":{"docs":{},"络":{"docs":{},"不":{"docs":{},"通":{"docs":{},",":{"docs":{},"请":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"同":{"docs":{},"时":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"一":{"docs":{},"个":{"docs":{},"或":{"docs":{},"是":{"docs":{},"一":{"docs":{},"类":{"docs":{},"异":{"docs":{},"常":{"docs":{},"日":{"docs":{},"志":{"docs":{},"连":{"docs":{},"续":{"docs":{},"出":{"docs":{},"现":{"docs":{},"几":{"docs":{},"十":{"docs":{},"遍":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"常":{"docs":{},"常":{"docs":{},"能":{"docs":{},"看":{"docs":{},"到":{"docs":{},"的":{"docs":{},"。":{"docs":{},"人":{"docs":{},"眼":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"漏":{"docs":{},"掉":{"docs":{},"淹":{"docs":{},"没":{"docs":{},"在":{"docs":{},"其":{"docs":{},"中":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"重":{"docs":{},"要":{"docs":{},"日":{"docs":{},"志":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"要":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"避":{"docs":{},"免":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"在":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"加":{"docs":{},"一":{"docs":{},"些":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"来":{"docs":{},"避":{"docs":{},"免":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"问":{"docs":{},"题":{"docs":{},"不":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"记":{"docs":{},"录":{"docs":{},"多":{"docs":{},"次":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}},"均":{"docs":{},"会":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},",":{"docs":{},"需":{"docs":{},"配":{"docs":{},"置":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}},"特":{"docs":{},"殊":{"docs":{},"值":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},"符":{"docs":{},"号":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"开":{"docs":{},"启":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}},"默":{"docs":{},"认":{"docs":{},"在":{"docs":{},"内":{"docs":{},"置":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"则":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},"表":{"docs":{},"示":{"docs":{},"剔":{"docs":{},"除":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"并":{"docs":{},"且":{"docs":{},"属":{"docs":{},"性":{"docs":{},"也":{"docs":{},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"有":{"docs":{},"利":{"docs":{},"于":{"docs":{},"文":{"docs":{},"件":{"docs":{},"配":{"docs":{},"置":{"docs":{},"与":{"docs":{},"编":{"docs":{},"程":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"一":{"docs":{},"致":{"docs":{},"性":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"学":{"docs":{},"习":{"docs":{},"成":{"docs":{},"本":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"以":{"docs":{},"这":{"docs":{},"个":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5.014285714285714}}}}}}},"责":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"与":{"docs":{},"发":{"docs":{},"现":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"次":{"docs":{},"和":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"监":{"docs":{},"控":{"docs":{},"。":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"合":{"docs":{},"并":{"docs":{},"结":{"docs":{},"果":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5.016949152542373}}}}}},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"分":{"docs":{},"组":{"docs":{},"聚":{"docs":{},"合":{"docs":{},"。":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}}}},"理":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"是":{"docs":{},",":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"允":{"docs":{},"许":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{},"相":{"docs":{},"同":{"docs":{},"但":{"docs":{},"参":{"docs":{},"数":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"并":{"docs":{},"存":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},",":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"作":{"docs":{},"为":{"docs":{},"条":{"docs":{},"件":{"docs":{},"查":{"docs":{},"询":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}},"取":{"docs":{},"消":{"docs":{},"注":{"docs":{},"册":{"docs":{},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}},"并":{"docs":{},"且":{"docs":{},"查":{"docs":{},"询":{"docs":{},"条":{"docs":{},"件":{"docs":{},"允":{"docs":{},"许":{"docs":{},"星":{"docs":{},"号":{"docs":{},"通":{"docs":{},"配":{"docs":{},",":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"所":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"分":{"docs":{},"组":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"或":{"docs":{},":":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"*":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"约":{"docs":{},"定":{"docs":{},"所":{"docs":{},"有":{"docs":{},"插":{"docs":{},"件":{"docs":{},",":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"标":{"docs":{},"注":{"docs":{},":":{"docs":{},"@":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"加":{"docs":{},"载":{"docs":{},"后":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"性":{"docs":{},"名":{"docs":{},"称":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"配":{"docs":{},"置":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"等":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"通":{"docs":{},"知":{"docs":{},"完":{"docs":{},"后":{"docs":{},"再":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}},"填":{"docs":{},"配":{"docs":{},"置":{"docs":{},"估":{"docs":{},"计":{"docs":{},"大":{"docs":{},"家":{"docs":{},"都":{"docs":{},"会":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"没":{"docs":{},"有":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"根":{"docs":{},"本":{"docs":{},"没":{"docs":{},"法":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{},"但":{"docs":{},"对":{"docs":{},"一":{"docs":{},"些":{"docs":{},"可":{"docs":{},"选":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"也":{"docs":{},"应":{"docs":{},"该":{"docs":{},"做":{"docs":{},"一":{"docs":{},"些":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"允":{"docs":{},"许":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"关":{"docs":{},"联":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"和":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},",":{"docs":{},"也":{"docs":{},"允":{"docs":{},"许":{"docs":{},"直":{"docs":{},"接":{"docs":{},"配":{"docs":{},"置":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"地":{"docs":{},"址":{"docs":{},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"直":{"docs":{},"连":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"是":{"docs":{},"可":{"docs":{},"选":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"配":{"docs":{},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"直":{"docs":{},"连":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"就":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"配":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},"候":{"docs":{},"也":{"docs":{},"要":{"docs":{},"做":{"docs":{},"相":{"docs":{},"应":{"docs":{},"检":{"docs":{},"查":{"docs":{},"。":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"总":{"docs":{},"是":{"docs":{},"以":{"docs":{},"服":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"和":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{},"维":{"docs":{},"度":{"docs":{},"全":{"docs":{},"量":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"即":{"docs":{},"不":{"docs":{},"会":{"docs":{},"通":{"docs":{},"知":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"部":{"docs":{},"分":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"比":{"docs":{},"上":{"docs":{},"一":{"docs":{},"次":{"docs":{},"通":{"docs":{},"知":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"按":{"docs":{},"全":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"取":{"docs":{},"消":{"docs":{},"注":{"docs":{},"册":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"订":{"docs":{},"阅":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"查":{"docs":{},"询":{"docs":{},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"与":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"的":{"docs":{},"推":{"docs":{},"模":{"docs":{},"式":{"docs":{},"相":{"docs":{},"对":{"docs":{},"应":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"为":{"docs":{},"拉":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"只":{"docs":{},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"次":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"时":{"docs":{},"的":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"类":{"docs":{},"型":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"全":{"docs":{},"量":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"地":{"docs":{},"址":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"连":{"docs":{},"接":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"动":{"docs":{},"态":{"docs":{},"代":{"docs":{},"理":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5.012345679012346},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5.016393442622951}}}}}},"码":{"docs":{},"约":{"docs":{},"定":{"docs":{"coding.html":{"ref":"coding.html","tf":5.007575757575758}}}}}},"消":{"docs":{},"息":{"docs":{},"派":{"docs":{},"发":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5.016129032258065}}}}}}}},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":5.010989010989011},"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}}}}},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"人":{"docs":{},"工":{"docs":{},"干":{"docs":{},"预":{"docs":{},"。":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}},"检":{"docs":{},"查":{"docs":{},"服":{"docs":{},"务":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"各":{"docs":{},"种":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"此":{"docs":{},"状":{"docs":{},"态":{"docs":{},"检":{"docs":{},"查":{"docs":{},"可":{"docs":{},"同":{"docs":{},"时":{"docs":{},"用":{"docs":{},"于":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"它":{"docs":{},"是":{"docs":{},"独":{"docs":{},"立":{"docs":{},"于":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"之":{"docs":{},"外":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"检":{"docs":{},"查":{"docs":{},"的":{"docs":{},"是":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"参":{"docs":{},"数":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"可":{"docs":{},"选":{"docs":{},"配":{"docs":{},"置":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"重":{"docs":{},"复":{"docs":{},"工":{"docs":{},"具":{"docs":{},"类":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"的":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"列":{"docs":{},"表":{"docs":{"checklist.html":{"ref":"checklist.html","tf":5.021739130434782}}}}}},"状":{"docs":{},"态":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"检":{"docs":{},"查":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5.014084507042254}}}}}},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"要":{"docs":{},"不":{"docs":{},"要":{"docs":{},"返":{"docs":{},"回":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"页":{"docs":{},"面":{"docs":{},"。":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}},"扩":{"docs":{},"展":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5.016393442622951}}}}}},"缓":{"docs":{},"存":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":5.009615384615385}}}}}},"验":{"docs":{},"证":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":5.011494252873563}}}},"令":{"docs":{},"牌":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"日":{"docs":{},"志":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},"输":{"docs":{},"出":{"docs":{},"适":{"docs":{},"配":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}},"适":{"docs":{},"配":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5.011111111111111}}}}}},"。":{"docs":{"contract.html":{"ref":"contract.html","tf":0.14285714285714285}}},"实":{"docs":{},"时":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"每":{"docs":{},"周":{"docs":{},"汇":{"docs":{},"总":{"docs":{},"发":{"docs":{},"送":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"表":{"docs":{},"示":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"中":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"多":{"docs":{},"的":{"docs":{},"收":{"docs":{},"集":{"docs":{},"关":{"docs":{},"键":{"docs":{},"信":{"docs":{},"息":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}},"失":{"docs":{},"去":{"docs":{},"意":{"docs":{},"义":{"docs":{},"。":{"docs":{},"再":{"docs":{},"辅":{"docs":{},"以":{"docs":{},"人":{"docs":{},"工":{"docs":{},"定":{"docs":{},"期":{"docs":{},"查":{"docs":{},"看":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}},"是":{"docs":{},"发":{"docs":{},"现":{"docs":{},"问":{"docs":{},"题":{"docs":{},"、":{"docs":{},"查":{"docs":{},"看":{"docs":{},"问":{"docs":{},"题":{"docs":{},"一":{"docs":{},"个":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"手":{"docs":{},"段":{"docs":{},"。":{"docs":{},"日":{"docs":{},"志":{"docs":{},"质":{"docs":{},"量":{"docs":{},"往":{"docs":{},"往":{"docs":{},"被":{"docs":{},"忽":{"docs":{},"视":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"日":{"docs":{},"志":{"docs":{},"使":{"docs":{},"用":{"docs":{},"上":{"docs":{},"的":{"docs":{},"明":{"docs":{},"确":{"docs":{},"约":{"docs":{},"定":{"docs":{},"。":{"docs":{},"重":{"docs":{},"视":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"包":{"docs":{},"含":{"docs":{},"环":{"docs":{},"境":{"docs":{},"信":{"docs":{},"息":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"的":{"docs":{},"中":{"docs":{},"间":{"docs":{},"状":{"docs":{},"态":{"docs":{},"提":{"docs":{},"示":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}},"保":{"docs":{},"持":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"速":{"docs":{},"度":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"将":{"docs":{},"性":{"docs":{},"能":{"docs":{},"和":{"docs":{},"大":{"docs":{},"的":{"docs":{},"集":{"docs":{},"成":{"docs":{},"用":{"docs":{},"例":{"docs":{},"放":{"docs":{},"在":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"中":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"每":{"docs":{},"个":{"docs":{},"用":{"docs":{},"例":{"docs":{},"都":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"少":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"有":{"docs":{},"助":{"docs":{},"于":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"开":{"docs":{},"放":{"docs":{},"的":{"docs":{},"系":{"docs":{},"统":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"重":{"docs":{},"要":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"各":{"docs":{},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"致":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"模":{"docs":{},"型":{"docs":{},",":{"docs":{},"能":{"docs":{},"相":{"docs":{},"互":{"docs":{},"指":{"docs":{},"引":{"docs":{},",":{"docs":{},"并":{"docs":{},"减":{"docs":{},"少":{"docs":{},"模":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"证":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},"和":{"docs":{},"可":{"docs":{},"见":{"docs":{},"性":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"单":{"docs":{},"元":{"docs":{},"和":{"docs":{},"集":{"docs":{},"成":{"docs":{},"测":{"docs":{},"试":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"测":{"docs":{},"试":{"docs":{},"统":{"docs":{},"一":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}},"子":{"docs":{},"包":{"docs":{},"下":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{},"实":{"docs":{},"现":{"docs":{},"用":{"docs":{},"放":{"docs":{},"在":{"docs":{},"以":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"名":{"docs":{},"字":{"docs":{},"命":{"docs":{},"名":{"docs":{},"的":{"docs":{},"子":{"docs":{},"包":{"docs":{},"下":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}},"完":{"docs":{},"成":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"(":{"docs":{},"保":{"docs":{},"证":{"docs":{},"两":{"docs":{},"方":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"投":{"docs":{},"入":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"携":{"docs":{},"带":{"docs":{},"完":{"docs":{},"整":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"出":{"docs":{},"错":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"出":{"docs":{},"错":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"对":{"docs":{},"方":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"连":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"量":{"docs":{},"保":{"docs":{},"持":{"docs":{},"子":{"docs":{},"包":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"父":{"docs":{},"包":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"反":{"docs":{},"向":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"将":{"docs":{},"直":{"docs":{},"接":{"docs":{},"原":{"docs":{},"因":{"docs":{},"写":{"docs":{},"在":{"docs":{},"最":{"docs":{},"前":{"docs":{},"面":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"在":{"docs":{},"原":{"docs":{},"因":{"docs":{},"后":{"docs":{},"用":{"docs":{},"键":{"docs":{},"值":{"docs":{},"对":{"docs":{},"显":{"docs":{},"示":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.015151515151515152}}}}},"早":{"docs":{},"失":{"docs":{},"败":{"docs":{},"也":{"docs":{},"应":{"docs":{},"该":{"docs":{},"成":{"docs":{},"为":{"docs":{},"潜":{"docs":{},"意":{"docs":{},"识":{"docs":{},",":{"docs":{},"在":{"docs":{},"有":{"docs":{},"传":{"docs":{},"入":{"docs":{},"参":{"docs":{},"数":{"docs":{},"和":{"docs":{},"状":{"docs":{},"态":{"docs":{},"变":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"均":{"docs":{},"在":{"docs":{},"入":{"docs":{},"口":{"docs":{},"处":{"docs":{},"全":{"docs":{},"部":{"docs":{},"断":{"docs":{},"言":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"合":{"docs":{},"法":{"docs":{},"的":{"docs":{},"值":{"docs":{},"和":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"在":{"docs":{},"第":{"docs":{},"一":{"docs":{},"时":{"docs":{},"间":{"docs":{},"就":{"docs":{},"应":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"等":{"docs":{},"到":{"docs":{},"要":{"docs":{},"用":{"docs":{},"时":{"docs":{},"才":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"等":{"docs":{},"到":{"docs":{},"要":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"前":{"docs":{},"面":{"docs":{},"已":{"docs":{},"经":{"docs":{},"修":{"docs":{},"改":{"docs":{},"其":{"docs":{},"它":{"docs":{},"相":{"docs":{},"关":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"而":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"中":{"docs":{},"很":{"docs":{},"少":{"docs":{},"有":{"docs":{},"人":{"docs":{},"去":{"docs":{},"处":{"docs":{},"理":{"docs":{},"回":{"docs":{},"滚":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"报":{"docs":{},"错":{"docs":{},"后":{"docs":{},",":{"docs":{},"其":{"docs":{},"实":{"docs":{},"内":{"docs":{},"部":{"docs":{},"状":{"docs":{},"态":{"docs":{},"可":{"docs":{},"能":{"docs":{},"已":{"docs":{},"经":{"docs":{},"混":{"docs":{},"乱":{"docs":{},",":{"docs":{},"极":{"docs":{},"易":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"隐":{"docs":{},"蔽":{"docs":{},"分":{"docs":{},"支":{"docs":{},"上":{"docs":{},"引":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"不":{"docs":{},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"前":{"docs":{},"置":{"docs":{},"断":{"docs":{},"言":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}},"嵌":{"docs":{},"套":{"docs":{},",":{"docs":{},"保":{"docs":{},"持":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"建":{"docs":{},"议":{"docs":{},"应":{"docs":{},"用":{"docs":{},"方":{"docs":{},"在":{"docs":{},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},"配":{"docs":{},"置":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}},"异":{"docs":{},"常":{"docs":{},"和":{"docs":{},"日":{"docs":{},"志":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"防":{"docs":{},"御":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"异":{"docs":{},"常":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"给":{"docs":{},"出":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"案":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},",":{"docs":{},"就":{"docs":{},"这":{"docs":{},"几":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"啥":{"docs":{},"都":{"docs":{},"没":{"docs":{},"有":{"docs":{},",":{"docs":{},"哪":{"docs":{},"个":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}},"循":{"docs":{},"环":{"docs":{},"等":{"docs":{},"待":{"docs":{},"结":{"docs":{},"果":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"对":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"和":{"docs":{},"网":{"docs":{},"络":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"用":{"docs":{},"以":{"docs":{},"将":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"中":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"抽":{"docs":{},"为":{"docs":{},"方":{"docs":{},"法":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"打":{"docs":{},"印":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"错":{"docs":{},"误":{"docs":{},"日":{"docs":{},"志":{"docs":{},",":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"基":{"docs":{},"本":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"不":{"docs":{},"用":{"docs":{},"打":{"docs":{},"印":{"docs":{},"日":{"docs":{},"志":{"docs":{},",":{"docs":{},"由":{"docs":{},"最":{"docs":{},"终":{"docs":{},"处":{"docs":{},"理":{"docs":{},"异":{"docs":{},"常":{"docs":{},"者":{"docs":{},"决":{"docs":{},"定":{"docs":{},"打":{"docs":{},"印":{"docs":{},"日":{"docs":{},"志":{"docs":{},"的":{"docs":{},"级":{"docs":{},"别":{"docs":{},",":{"docs":{},"吃":{"docs":{},"掉":{"docs":{},"异":{"docs":{},"常":{"docs":{},"必":{"docs":{},"需":{"docs":{},"打":{"docs":{},"印":{"docs":{},"日":{"docs":{},"志":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"断":{"docs":{},"言":{"docs":{},"日":{"docs":{},"志":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}},"表":{"docs":{},"示":{"docs":{},"正":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"或":{"docs":{},"完":{"docs":{},"全":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}},"黑":{"docs":{},"名":{"docs":{},"单":{"docs":{},",":{"docs":{},"这":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"雷":{"docs":{},",":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"修":{"docs":{},"改":{"docs":{},"者":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"你":{"docs":{},"自":{"docs":{},"己":{"docs":{},",":{"docs":{},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"记":{"docs":{},"得":{"docs":{},"有":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"后":{"docs":{},"面":{"docs":{},"为":{"docs":{},"了":{"docs":{},"改":{"docs":{},"某":{"docs":{},"个":{"docs":{},"其":{"docs":{},"它":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}},"可":{"docs":{},"以":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"人":{"docs":{},"工":{"docs":{},"介":{"docs":{},"入":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"人":{"docs":{},"工":{"docs":{},"介":{"docs":{},"入":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{},"规":{"docs":{},"范":{"docs":{},":":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":5.25}}}},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"健":{"docs":{},"壮":{"docs":{},"性":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":5.010309278350515}}}}}}}},"或":{"docs":{},"实":{"docs":{},"现":{"docs":{},"不":{"docs":{},"优":{"docs":{},"雅":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"置":{"docs":{},"上":{"docs":{},"限":{"docs":{},"。":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"面":{"docs":{},"不":{"docs":{},"停":{"docs":{},"的":{"docs":{},"提":{"docs":{},"到":{"docs":{},"代":{"docs":{},"码":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"人":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"这":{"docs":{},"也":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"要":{"docs":{},"随":{"docs":{},"时":{"docs":{},"紧":{"docs":{},"记":{"docs":{},"的":{"docs":{},"。":{"docs":{},"这":{"docs":{},"个":{"docs":{},"其":{"docs":{},"他":{"docs":{},"人":{"docs":{},"包":{"docs":{},"括":{"docs":{},"未":{"docs":{},"来":{"docs":{},"的":{"docs":{},"自":{"docs":{},"己":{"docs":{},",":{"docs":{},"你":{"docs":{},"要":{"docs":{},"总":{"docs":{},"想":{"docs":{},"着":{"docs":{},"这":{"docs":{},"个":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"人":{"docs":{},"去":{"docs":{},"改":{"docs":{},"它":{"docs":{},"。":{"docs":{},"我":{"docs":{},"应":{"docs":{},"该":{"docs":{},"给":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"人":{"docs":{},"一":{"docs":{},"点":{"docs":{},"什":{"docs":{},"么":{"docs":{},"提":{"docs":{},"示":{"docs":{},",":{"docs":{},"让":{"docs":{},"他":{"docs":{},"知":{"docs":{},"道":{"docs":{},"我":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"意":{"docs":{},"图":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"里":{"docs":{},"面":{"docs":{},"加":{"docs":{},"潜":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"或":{"docs":{},"埋":{"docs":{},"一":{"docs":{},"些":{"docs":{},"容":{"docs":{},"易":{"docs":{},"忽":{"docs":{},"视":{"docs":{},"的":{"docs":{},"雷":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"你":{"docs":{},"用":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"不":{"docs":{},"通":{"docs":{},"过":{"docs":{},"。":{"docs":{},"时":{"docs":{},"间":{"docs":{},"一":{"docs":{},"紧":{"docs":{},",":{"docs":{},"谁":{"docs":{},"有":{"docs":{},"这":{"docs":{},"个":{"docs":{},"闲":{"docs":{},"功":{"docs":{},"夫":{"docs":{},"去":{"docs":{},"改":{"docs":{},"这":{"docs":{},"么":{"docs":{},"多":{"docs":{},"形":{"docs":{},"态":{"docs":{},"各":{"docs":{},"异":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"?":{"docs":{},"久":{"docs":{},"而":{"docs":{},"久":{"docs":{},"之":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"就":{"docs":{},"已":{"docs":{},"经":{"docs":{},"不":{"docs":{},"能":{"docs":{},"真":{"docs":{},"实":{"docs":{},"反":{"docs":{},"应":{"docs":{},"代":{"docs":{},"码":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"状":{"docs":{},"况":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"被":{"docs":{},"迫":{"docs":{},"绕":{"docs":{},"过":{"docs":{},"。":{"docs":{},"最":{"docs":{},"好":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"是":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"有":{"docs":{},"且":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"行":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"通":{"docs":{},"过":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"修":{"docs":{},"改":{"docs":{},"了":{"docs":{},"代":{"docs":{},"码":{"docs":{},"而":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"还":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"那":{"docs":{},"也":{"docs":{},"不":{"docs":{},"行":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"测":{"docs":{},"试":{"docs":{},"没":{"docs":{},"有":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"到":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"可":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"项":{"docs":{},"目":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"每":{"docs":{},"天":{"docs":{},"都":{"docs":{},"要":{"docs":{},"去":{"docs":{},"帮":{"docs":{},"应":{"docs":{},"用":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"来":{"docs":{},"来":{"docs":{},"回":{"docs":{},"回":{"docs":{},",":{"docs":{},"发":{"docs":{},"现":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"都":{"docs":{},"是":{"docs":{},"配":{"docs":{},"置":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"或":{"docs":{},"类":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"网":{"docs":{},"络":{"docs":{},"不":{"docs":{},"通":{"docs":{},"等":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"准":{"docs":{},"备":{"docs":{},"在":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"中":{"docs":{},"加":{"docs":{},"入":{"docs":{},"防":{"docs":{},"痴":{"docs":{},"呆":{"docs":{},"设":{"docs":{},"计":{"docs":{},"。":{"docs":{},"估":{"docs":{},"且":{"docs":{},"这":{"docs":{},"么":{"docs":{},"叫":{"docs":{},"吧":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"排":{"docs":{},"错":{"docs":{},"速":{"docs":{},"度":{"docs":{},"还":{"docs":{},"是":{"docs":{},"有":{"docs":{},"点":{"docs":{},"帮":{"docs":{},"助":{"docs":{},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"能":{"docs":{},"抛":{"docs":{},"砖":{"docs":{},"引":{"docs":{},"玉":{"docs":{},",":{"docs":{},"也":{"docs":{},"希":{"docs":{},"望":{"docs":{},"大":{"docs":{},"家":{"docs":{},"多":{"docs":{},"给":{"docs":{},"力":{"docs":{},",":{"docs":{},"想":{"docs":{},"出":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"防":{"docs":{},"范":{"docs":{},"措":{"docs":{},"施":{"docs":{},"共":{"docs":{},"享":{"docs":{},"出":{"docs":{},"来":{"docs":{},"。":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"大":{"docs":{},"家":{"docs":{},"经":{"docs":{},"常":{"docs":{},"说":{"docs":{},",":{"docs":{},"魔":{"docs":{},"鬼":{"docs":{},"在":{"docs":{},"细":{"docs":{},"节":{"docs":{},"中":{"docs":{},",":{"docs":{},"确":{"docs":{},"实":{"docs":{},"如":{"docs":{},"此":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"凡":{"docs":{},"发":{"docs":{},"展":{"docs":{},"的":{"docs":{},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"的":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"都":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"微":{"docs":{},"核":{"docs":{},"的":{"docs":{},"理":{"docs":{},"念":{"docs":{},"。":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"是":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"的":{"docs":{},"基":{"docs":{},"础":{"docs":{},",":{"docs":{},"把":{"docs":{},"间":{"docs":{},"接":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"屏":{"docs":{},"蔽":{"docs":{},"掉":{"docs":{},"。":{"docs":{},"可":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"最":{"docs":{},"大":{"docs":{},"的":{"docs":{},"杀":{"docs":{},"手":{"docs":{},"就":{"docs":{},"是":{"docs":{},"静":{"docs":{},"态":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"少":{"docs":{},"用":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"提":{"docs":{},"高":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"可":{"docs":{},"测":{"docs":{},"性":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}},"供":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"要":{"docs":{},"同":{"docs":{},"时":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"配":{"docs":{},"管":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"系":{"docs":{},"统":{"docs":{},"管":{"docs":{},"理":{"docs":{},"员":{"docs":{},"。":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"修":{"docs":{},"改":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"环":{"docs":{},"境":{"docs":{},"很":{"docs":{},"可":{"docs":{},"能":{"docs":{},"较":{"docs":{},"为":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"为":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"留":{"docs":{},"一":{"docs":{},"些":{"docs":{},"“":{"docs":{},"后":{"docs":{},"门":{"docs":{},"”":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"外":{"docs":{},"围":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"。":{"docs":{},"就":{"docs":{},"像":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"近":{"docs":{},"一":{"docs":{},"直":{"docs":{},"担":{"docs":{},"心":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}},"给":{"docs":{},"团":{"docs":{},"队":{"docs":{},"新":{"docs":{},"人":{"docs":{},"讲":{"docs":{},"了":{"docs":{},"一":{"docs":{},"些":{"docs":{},"设":{"docs":{},"计":{"docs":{},"上":{"docs":{},"的":{"docs":{},"常":{"docs":{},"识":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"对":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"新":{"docs":{},"人":{"docs":{},"也":{"docs":{},"有":{"docs":{},"些":{"docs":{},"帮":{"docs":{},"助":{"docs":{},",":{"docs":{},"把":{"docs":{},"暂":{"docs":{},"时":{"docs":{},"想":{"docs":{},"到":{"docs":{},"的":{"docs":{},"几":{"docs":{},"条":{"docs":{},",":{"docs":{},"先":{"docs":{},"记":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"点":{"docs":{},"痴":{"docs":{},"呆":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"解":{"docs":{},"决":{"docs":{},"了":{"docs":{},"太":{"docs":{},"多":{"docs":{},"的":{"docs":{},"痴":{"docs":{},"呆":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"实":{"docs":{},"施":{"docs":{},"面":{"docs":{},"超":{"docs":{},"来":{"docs":{},"超":{"docs":{},"广":{"docs":{},",":{"docs":{},"已":{"docs":{},"有":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"痴":{"docs":{},"呆":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"相":{"docs":{},"同":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{},",":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"终":{"docs":{},"决":{"docs":{},"定":{"docs":{},"采":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"缩":{"docs":{},"小":{"docs":{},"可":{"docs":{},"变":{"docs":{},"域":{"docs":{},"和":{"docs":{},"尽":{"docs":{},"量":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}},"防":{"docs":{},"止":{"docs":{},"空":{"docs":{},"指":{"docs":{},"针":{"docs":{},"和":{"docs":{},"下":{"docs":{},"标":{"docs":{},"越":{"docs":{},"界":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}},"御":{"docs":{},"性":{"docs":{},"容":{"docs":{},"错":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}},"痴":{"docs":{},"呆":{"docs":{},"设":{"docs":{},"计":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":5.001779359430605}}}}}}},"降":{"docs":{},"低":{"docs":{},"修":{"docs":{},"改":{"docs":{},"时":{"docs":{},"的":{"docs":{},"误":{"docs":{},"解":{"docs":{},"性":{"docs":{},",":{"docs":{},"不":{"docs":{},"埋":{"docs":{},"雷":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}},"魔":{"docs":{},"鬼":{"docs":{},"在":{"docs":{},"细":{"docs":{},"节":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":5.015625}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{},"e":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"与":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"要":{"docs":{},"原":{"docs":{},"理":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"什":{"docs":{},"么":{"docs":{},"是":{"docs":{},"会":{"docs":{},"话":{"docs":{},"?":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"次":{"docs":{},"交":{"docs":{},"互":{"docs":{},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{},"会":{"docs":{},"话":{"docs":{},"中":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"是":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"是":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"?":{"docs":{},"比":{"docs":{},"如":{"docs":{},"我":{"docs":{},"们":{"docs":{},"说":{"docs":{},":":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"见":{"docs":{},"”":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"的":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"”":{"docs":{},"就":{"docs":{},"是":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"说":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"”":{"docs":{},"对":{"docs":{},"方":{"docs":{},"会":{"docs":{},"知":{"docs":{},"道":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"我":{"docs":{},"们":{"docs":{},"前":{"docs":{},"面":{"docs":{},"定":{"docs":{},"义":{"docs":{},"了":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"”":{"docs":{},"的":{"docs":{},"具":{"docs":{},"体":{"docs":{},"内":{"docs":{},"容":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"说":{"docs":{},",":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"通":{"docs":{},"常":{"docs":{},"持":{"docs":{},"有":{"docs":{},"交":{"docs":{},"互":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"变":{"docs":{},"量":{"docs":{},"等":{"docs":{},"。":{"docs":{},"会":{"docs":{},"话":{"docs":{},"对":{"docs":{},"象":{"docs":{},"通":{"docs":{},"常":{"docs":{},"较":{"docs":{},"轻":{"docs":{},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"请":{"docs":{},"求":{"docs":{},"都":{"docs":{},"重":{"docs":{},"新":{"docs":{},"创":{"docs":{},"建":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"请":{"docs":{},"求":{"docs":{},"结":{"docs":{},"束":{"docs":{},"后":{"docs":{},"销":{"docs":{},"毁":{"docs":{},"。":{"docs":{},"简":{"docs":{},"而":{"docs":{},"言":{"docs":{},"之":{"docs":{},":":{"docs":{},"把":{"docs":{},"元":{"docs":{},"信":{"docs":{},"息":{"docs":{},"交":{"docs":{},"由":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"持":{"docs":{},"有":{"docs":{},",":{"docs":{},"把":{"docs":{},"一":{"docs":{},"次":{"docs":{},"请":{"docs":{},"求":{"docs":{},"中":{"docs":{},"的":{"docs":{},"临":{"docs":{},"时":{"docs":{},"状":{"docs":{},"态":{"docs":{},"由":{"docs":{},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},"持":{"docs":{},"有":{"docs":{},",":{"docs":{},"由":{"docs":{},"服":{"docs":{},"务":{"docs":{},"域":{"docs":{},"贯":{"docs":{},"穿":{"docs":{},"整":{"docs":{},"个":{"docs":{},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"原":{"docs":{},"因":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"任":{"docs":{},"何":{"docs":{},"框":{"docs":{},"架":{"docs":{},"或":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"总":{"docs":{},"会":{"docs":{},"有":{"docs":{},"核":{"docs":{},"心":{"docs":{},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}},"务":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"住":{"docs":{},"所":{"docs":{},"有":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"外":{"docs":{},"置":{"docs":{},"行":{"docs":{},"为":{"docs":{},",":{"docs":{},"是":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"人":{"docs":{},"想":{"docs":{},"在":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"前":{"docs":{},",":{"docs":{},"验":{"docs":{},"证":{"docs":{},"下":{"docs":{},"令":{"docs":{},"牌":{"docs":{},",":{"docs":{},"验":{"docs":{},"证":{"docs":{},"下":{"docs":{},"黑":{"docs":{},"白":{"docs":{},"名":{"docs":{},"单":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"下":{"docs":{},"日":{"docs":{},"志":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"人":{"docs":{},"想":{"docs":{},"在":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"做":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"要":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"参":{"docs":{},"考":{"docs":{},"值":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"没":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"就":{"docs":{},"以":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"为":{"docs":{},"准":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"继":{"docs":{},"承":{"docs":{},"了":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"的":{"docs":{},"建":{"docs":{},"议":{"docs":{},"配":{"docs":{},"置":{"docs":{},"值":{"docs":{},"。":{"docs":{},"而":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"中":{"docs":{},"途":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"就":{"docs":{},"达":{"docs":{},"到":{"docs":{},"了":{"docs":{},"治":{"docs":{},"理":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},",":{"docs":{},"继":{"docs":{},"承":{"docs":{},"关":{"docs":{},"系":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"候":{"docs":{},"这":{"docs":{},"类":{"docs":{},"配":{"docs":{},"置":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"框":{"docs":{},"架":{"docs":{},"就":{"docs":{},"控":{"docs":{},"制":{"docs":{},"了":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}},"区":{"docs":{},"分":{"docs":{},"命":{"docs":{},"令":{"docs":{},"与":{"docs":{},"查":{"docs":{},"询":{"docs":{},",":{"docs":{},"明":{"docs":{},"确":{"docs":{},"前":{"docs":{},"置":{"docs":{},"条":{"docs":{},"件":{"docs":{},"与":{"docs":{},"后":{"docs":{},"置":{"docs":{},"条":{"docs":{},"件":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"标":{"docs":{},"准":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"用":{"docs":{},"户":{"docs":{},"按":{"docs":{},"某":{"docs":{},"种":{"docs":{},"约":{"docs":{},"定":{"docs":{},"做":{"docs":{},"事":{"docs":{},"时":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"该":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"配":{"docs":{},"置":{"docs":{},"模":{"docs":{},"板":{"docs":{},"位":{"docs":{},"置":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"放":{"docs":{},"在":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"都":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"前":{"docs":{},"置":{"docs":{},"断":{"docs":{},"言":{"docs":{},"传":{"docs":{},"入":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{},"合":{"docs":{},"法":{"docs":{},"性":{"docs":{},",":{"docs":{},"后":{"docs":{},"置":{"docs":{},"断":{"docs":{},"言":{"docs":{},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},"的":{"docs":{},"合":{"docs":{},"法":{"docs":{},"性":{"docs":{},",":{"docs":{},"并":{"docs":{},"文":{"docs":{},"档":{"docs":{},"化":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"尽":{"docs":{},"相":{"docs":{},"同":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"只":{"docs":{},"是":{"docs":{},"策":{"docs":{},"略":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"替":{"docs":{},"换":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"微":{"docs":{},"核":{"docs":{},"插":{"docs":{},"件":{"docs":{},"式":{"docs":{},",":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"前":{"docs":{},"加":{"docs":{},"下":{"docs":{},"分":{"docs":{},"页":{"docs":{},"包":{"docs":{},"装":{"docs":{},",":{"docs":{},"做":{"docs":{},"下":{"docs":{},"数":{"docs":{},"据":{"docs":{},"权":{"docs":{},"限":{"docs":{},"控":{"docs":{},"制":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"下":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"间":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"人":{"docs":{},"想":{"docs":{},"在":{"docs":{},"请":{"docs":{},"求":{"docs":{},"执":{"docs":{},"行":{"docs":{},"前":{"docs":{},"检":{"docs":{},"查":{"docs":{},"下":{"docs":{},"角":{"docs":{},"色":{"docs":{},",":{"docs":{},"包":{"docs":{},"装":{"docs":{},"下":{"docs":{},"输":{"docs":{},"入":{"docs":{},"输":{"docs":{},"出":{"docs":{},"流":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"下":{"docs":{},"请":{"docs":{},"求":{"docs":{},"量":{"docs":{},",":{"docs":{},"等":{"docs":{},"等":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"行":{"docs":{},"完":{"docs":{},"成":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"用":{"docs":{},"侵":{"docs":{},"入":{"docs":{},"框":{"docs":{},"架":{"docs":{},"内":{"docs":{},"部":{"docs":{},"。":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"把":{"docs":{},"过":{"docs":{},"程":{"docs":{},"本":{"docs":{},"身":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"对":{"docs":{},"象":{"docs":{},"封":{"docs":{},"装":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"传":{"docs":{},"给":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"链":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"某":{"docs":{},"个":{"docs":{},"值":{"docs":{},",":{"docs":{},"或":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"属":{"docs":{},"性":{"docs":{},"值":{"docs":{},",":{"docs":{},"或":{"docs":{},"查":{"docs":{},"询":{"docs":{},"一":{"docs":{},"条":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"记":{"docs":{},"录":{"docs":{},"。":{"docs":{},"命":{"docs":{},"令":{"docs":{},"是":{"docs":{},"指":{"docs":{},"有":{"docs":{},"副":{"docs":{},"作":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"条":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"记":{"docs":{},"录":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"即":{"docs":{},"做":{"docs":{},"了":{"docs":{},"修":{"docs":{},"改":{"docs":{},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"又":{"docs":{},"做":{"docs":{},"了":{"docs":{},"查":{"docs":{},"询":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"可":{"docs":{},"能":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"拆":{"docs":{},"成":{"docs":{},"写":{"docs":{},"读":{"docs":{},"分":{"docs":{},"离":{"docs":{},"的":{"docs":{},"两":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"结":{"docs":{},"果":{"docs":{},"都":{"docs":{},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"上":{"docs":{},"面":{"docs":{},"说":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},",":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},"它":{"docs":{},"的":{"docs":{},"协":{"docs":{},"议":{"docs":{},"是":{"docs":{},"可":{"docs":{},"以":{"docs":{},"替":{"docs":{},"换":{"docs":{},"的":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"只":{"docs":{},"提":{"docs":{},"供":{"docs":{},"一":{"docs":{},"个":{"docs":{},"总":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"到":{"docs":{},"切":{"docs":{},"换":{"docs":{},"协":{"docs":{},"议":{"docs":{},",":{"docs":{},"但":{"docs":{},"协":{"docs":{},"议":{"docs":{},"支":{"docs":{},"持":{"docs":{},"是":{"docs":{},"可":{"docs":{},"以":{"docs":{},"细":{"docs":{},"分":{"docs":{},"为":{"docs":{},"底":{"docs":{},"层":{"docs":{},"通":{"docs":{},"讯":{"docs":{},",":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},",":{"docs":{},"动":{"docs":{},"态":{"docs":{},"代":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"拆":{"docs":{},"细":{"docs":{},",":{"docs":{},"正":{"docs":{},"交":{"docs":{},"分":{"docs":{},"解":{"docs":{},",":{"docs":{},"会":{"docs":{},"更":{"docs":{},"便":{"docs":{},"于":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"复":{"docs":{},"用":{"docs":{},"已":{"docs":{},"有":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"而":{"docs":{},"只":{"docs":{},"是":{"docs":{},"替":{"docs":{},"换":{"docs":{},"某":{"docs":{},"部":{"docs":{},"分":{"docs":{},"实":{"docs":{},"现":{"docs":{},"策":{"docs":{},"略":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},"这":{"docs":{},"个":{"docs":{},"分":{"docs":{},"解":{"docs":{},"的":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"需":{"docs":{},"要":{"docs":{},"把":{"docs":{},"握":{"docs":{},"好":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},":":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"肯":{"docs":{},"定":{"docs":{},"少":{"docs":{},"不":{"docs":{},"了":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"功":{"docs":{},"能":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"把":{"docs":{},"流":{"docs":{},"转":{"docs":{},"成":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"对":{"docs":{},"象":{"docs":{},"转":{"docs":{},"成":{"docs":{},"流":{"docs":{},"。":{"docs":{},"但":{"docs":{},"因":{"docs":{},"有":{"docs":{},"些":{"docs":{},"地":{"docs":{},"方":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"基":{"docs":{},"类":{"docs":{},"模":{"docs":{},"板":{"docs":{},"方":{"docs":{},"法":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"就":{"docs":{},"不":{"docs":{},"用":{"docs":{},"配":{"docs":{},"了":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"想":{"docs":{},"换":{"docs":{},"个":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"就":{"docs":{},"配":{"docs":{},"置":{"docs":{},"下":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"与":{"docs":{},"接":{"docs":{},"口":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"文":{"docs":{},"本":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"名":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"名":{"docs":{},"用":{"docs":{},"换":{"docs":{},"行":{"docs":{},"符":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"服":{"docs":{},"务":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"来":{"docs":{},"保":{"docs":{},"存":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"和":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"集":{"docs":{},"群":{"docs":{},"不":{"docs":{},"同":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"也":{"docs":{},"通":{"docs":{},"过":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"来":{"docs":{},"之":{"docs":{},"间":{"docs":{},"同":{"docs":{},"步":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"以":{"docs":{},"感":{"docs":{},"知":{"docs":{},"其":{"docs":{},"它":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"上":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"。":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"会":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"保":{"docs":{},"证":{"docs":{},"一":{"docs":{},"份":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"和":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"独":{"docs":{},"立":{"docs":{},"对":{"docs":{},"外":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"转":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"拿":{"docs":{},"不":{"docs":{},"到":{"docs":{},"其":{"docs":{},"它":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"当":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"时":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"会":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"写":{"docs":{},"回":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},",":{"docs":{},"并":{"docs":{},"拿":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"中":{"docs":{},"新":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},"的":{"docs":{},"就":{"docs":{},"继":{"docs":{},"承":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"等":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"过":{"docs":{},"程":{"docs":{},"要":{"docs":{},"有":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"要":{"docs":{},"写":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},";":{"docs":{},"同":{"docs":{},"理":{"docs":{},",":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"期":{"docs":{},",":{"docs":{},"删":{"docs":{},"除":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"一":{"docs":{},"遍":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{},"变":{"docs":{},"更":{"docs":{},"发":{"docs":{},"送":{"docs":{},"事":{"docs":{},"件":{"docs":{},"并":{"docs":{},"留":{"docs":{},"出":{"docs":{},"监":{"docs":{},"听":{"docs":{},"接":{"docs":{},"口":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}},"试":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},"延":{"docs":{},"迟":{"docs":{},"策":{"docs":{},"略":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"连":{"docs":{},"时":{"docs":{},"随":{"docs":{},"机":{"docs":{},"延":{"docs":{},"时":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"交":{"docs":{},"互":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"原":{"docs":{},"来":{"docs":{},"同":{"docs":{},"步":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"是":{"docs":{},"会":{"docs":{},"话":{"docs":{},"消":{"docs":{},"息":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"场":{"docs":{},"景":{"docs":{},"都":{"docs":{},"传":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"付":{"docs":{},"出":{"docs":{},"了":{"docs":{},"代":{"docs":{},"价":{"docs":{},"。":{"docs":{},"而":{"docs":{},"如":{"docs":{},"果":{"docs":{},"采":{"docs":{},"用":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"非":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}},"出":{"docs":{},"来":{"docs":{},"的":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"不":{"docs":{},"自":{"docs":{},"觉":{"docs":{},"选":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"把":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"改":{"docs":{},"成":{"docs":{},"了":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}},"问":{"docs":{},"题":{"docs":{},"时":{"docs":{},"的":{"docs":{},"现":{"docs":{},"场":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"即":{"docs":{},"排":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"要":{"docs":{},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"如":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"失":{"docs":{},"败":{"docs":{},"时":{"docs":{},",":{"docs":{},"要":{"docs":{},"给":{"docs":{},"出":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"错":{"docs":{},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"环":{"docs":{},"境":{"docs":{},",":{"docs":{},"都":{"docs":{},"先":{"docs":{},"将":{"docs":{},"流":{"docs":{},"转":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"连":{"docs":{},"接":{"docs":{},"数":{"docs":{},",":{"docs":{},"超":{"docs":{},"时":{"docs":{},"等":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}},"谈":{"docs":{},"谈":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":5.010869565217392}}}}}}}}}}}}}}},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"把":{"docs":{},"原":{"docs":{},"来":{"docs":{},"非":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}},"要":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"检":{"docs":{},"查":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}},"世":{"docs":{},"界":{"docs":{},"里":{"docs":{},",":{"docs":{},"比":{"docs":{},"较":{"docs":{},"常":{"docs":{},"规":{"docs":{},"的":{"docs":{},"做":{"docs":{},"法":{"docs":{},",":{"docs":{},"是":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"约":{"docs":{},"定":{"docs":{},"在":{"docs":{},"每":{"docs":{},"个":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"约":{"docs":{},"定":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"存":{"docs":{},"在":{"docs":{},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"误":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"根":{"docs":{},"据":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"描":{"docs":{},"述":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"版":{"docs":{},"本":{"docs":{},"等":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"了":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"与":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"功":{"docs":{},"能":{"docs":{},"可":{"docs":{},"以":{"docs":{},"高":{"docs":{},"版":{"docs":{},"本":{"docs":{},"中":{"docs":{},"快":{"docs":{},"速":{"docs":{},"响":{"docs":{},"应":{"docs":{},",":{"docs":{},"并":{"docs":{},"让":{"docs":{},"应":{"docs":{},"用":{"docs":{},"能":{"docs":{},"试":{"docs":{},"用":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},":":{"docs":{},"高":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}},"旧":{"docs":{},"版":{"docs":{},"本":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"策":{"docs":{},"略":{"docs":{},"等":{"docs":{},"都":{"docs":{},"只":{"docs":{},"能":{"docs":{},"在":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"但":{"docs":{},"实":{"docs":{},"际":{"docs":{},"使":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"比":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"更":{"docs":{},"清":{"docs":{},"楚":{"docs":{},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"是":{"docs":{},"在":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"才":{"docs":{},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"。":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"就":{"docs":{},"加":{"docs":{},"入":{"docs":{},"了":{"docs":{},"在":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"也":{"docs":{},"能":{"docs":{},"配":{"docs":{},"这":{"docs":{},"些":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"传":{"docs":{},"递":{"docs":{},"到":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"约":{"docs":{},"定":{"docs":{},"在":{"docs":{},"每":{"docs":{},"个":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"都":{"docs":{},"是":{"docs":{},"先":{"docs":{},"配":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"者":{"docs":{},",":{"docs":{},"往":{"docs":{},"往":{"docs":{},"都":{"docs":{},"只":{"docs":{},"是":{"docs":{},"关":{"docs":{},"心":{"docs":{},"一":{"docs":{},"件":{"docs":{},"事":{"docs":{},",":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"完":{"docs":{},"全":{"docs":{},"分":{"docs":{},"离":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"要":{"docs":{},"有":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"次":{"docs":{},"应":{"docs":{},"用":{"docs":{},"一":{"docs":{},"出":{"docs":{},"错":{"docs":{},",":{"docs":{},"应":{"docs":{},"用":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},"或":{"docs":{},"测":{"docs":{},"试":{"docs":{},"就":{"docs":{},"会":{"docs":{},"把":{"docs":{},"出":{"docs":{},"错":{"docs":{},"信":{"docs":{},"息":{"docs":{},"发":{"docs":{},"过":{"docs":{},"来":{"docs":{},",":{"docs":{},"询":{"docs":{},"问":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},"候":{"docs":{},"我":{"docs":{},"都":{"docs":{},"会":{"docs":{},"问":{"docs":{},"一":{"docs":{},"大":{"docs":{},"堆":{"docs":{},"套":{"docs":{},"话":{"docs":{},",":{"docs":{},"用":{"docs":{},"的":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"呀":{"docs":{},"?":{"docs":{},"是":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"还":{"docs":{},"是":{"docs":{},"开":{"docs":{},"发":{"docs":{},"测":{"docs":{},"试":{"docs":{},"环":{"docs":{},"境":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"呀":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},"中":{"docs":{},"的":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"台":{"docs":{},"机":{"docs":{},"器":{"docs":{},"呀":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"线":{"docs":{},"上":{"docs":{},"环":{"docs":{},"境":{"docs":{},"一":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"大":{"docs":{},"家":{"docs":{},"就":{"docs":{},"慌":{"docs":{},"了":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"最":{"docs":{},"直":{"docs":{},"接":{"docs":{},"的":{"docs":{},"办":{"docs":{},"法":{"docs":{},"回":{"docs":{},"滚":{"docs":{},"重":{"docs":{},"启":{"docs":{},",":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"故":{"docs":{},"障":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"现":{"docs":{},"场":{"docs":{},"就":{"docs":{},"被":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"了":{"docs":{},",":{"docs":{},"要":{"docs":{},"想":{"docs":{},"事":{"docs":{},"后":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"就":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},"了":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"问":{"docs":{},"题":{"docs":{},"必":{"docs":{},"须":{"docs":{},"在":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"大":{"docs":{},"压":{"docs":{},"力":{"docs":{},"下":{"docs":{},"才":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},",":{"docs":{},"线":{"docs":{},"下":{"docs":{},"测":{"docs":{},"试":{"docs":{},"环":{"docs":{},"境":{"docs":{},"很":{"docs":{},"难":{"docs":{},"重":{"docs":{},"现":{"docs":{},",":{"docs":{},"不":{"docs":{},"太":{"docs":{},"可":{"docs":{},"能":{"docs":{},"让":{"docs":{},"开":{"docs":{},"发":{"docs":{},"或":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"是":{"docs":{},"完":{"docs":{},"全":{"docs":{},"无":{"docs":{},"侵":{"docs":{},"入":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"只":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"配":{"docs":{},"置":{"docs":{},"契":{"docs":{},"约":{"docs":{},"。":{"docs":{},"经":{"docs":{},"过":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"发":{"docs":{},"展":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"满":{"docs":{},"足":{"docs":{},"各":{"docs":{},"种":{"docs":{},"需":{"docs":{},"求":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"持":{"docs":{},"兼":{"docs":{},"容":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"只":{"docs":{},"增":{"docs":{},"不":{"docs":{},"减":{"docs":{},",":{"docs":{},"里":{"docs":{},"面":{"docs":{},"潜":{"docs":{},"伏":{"docs":{},"着":{"docs":{},"各":{"docs":{},"种":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"规":{"docs":{},"则":{"docs":{},"。":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"也":{"docs":{},"将":{"docs":{},"配":{"docs":{},"置":{"docs":{},"做":{"docs":{},"了":{"docs":{},"一":{"docs":{},"次":{"docs":{},"调":{"docs":{},"整":{"docs":{},",":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"了":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"很":{"docs":{},"多":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"都":{"docs":{},"是":{"docs":{},"放":{"docs":{},"在":{"docs":{},"基":{"docs":{},"类":{"docs":{},"中":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"通":{"docs":{},"过":{"docs":{},"模":{"docs":{},"板":{"docs":{},"方":{"docs":{},"法":{"docs":{},"回":{"docs":{},"调":{"docs":{},"子":{"docs":{},"类":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"当":{"docs":{},"成":{"docs":{},"了":{"docs":{},"核":{"docs":{},"心":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"包":{"docs":{},"含":{"docs":{},"了":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"选":{"docs":{},"的":{"docs":{},"是":{"docs":{},"第":{"docs":{},"二":{"docs":{},"种":{"docs":{},"。":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"还":{"docs":{},"有":{"docs":{},",":{"docs":{},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"间":{"docs":{},"隔":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{},"秒":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{},"毫":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"c":{"3":{"docs":{},"p":{"0":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"就":{"docs":{},"是":{"docs":{},"这":{"docs":{},"样":{"docs":{},")":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"人":{"docs":{},"员":{"docs":{},"会":{"docs":{},"疯":{"docs":{},"掉":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"项":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"隔":{"docs":{},"离":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"找":{"docs":{},"不":{"docs":{},"到":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"希":{"docs":{},"望":{"docs":{},"将":{"docs":{},"配":{"docs":{},"置":{"docs":{},"放":{"docs":{},"到":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"时":{"docs":{},",":{"docs":{},"不":{"docs":{},"太":{"docs":{},"方":{"docs":{},"便":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"驱":{"docs":{},"动":{"docs":{},"等":{"docs":{},",":{"docs":{},"都":{"docs":{},"是":{"docs":{},"采":{"docs":{},"用":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"严":{"docs":{},"格":{"docs":{},"约":{"docs":{},"定":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{},"n":{"docs":{},"、":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"级":{"docs":{},"别":{"docs":{},"记":{"docs":{},"录":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},"哪":{"docs":{},"些":{"docs":{},"是":{"docs":{},"关":{"docs":{},"键":{"docs":{},"信":{"docs":{},"息":{"docs":{},"呢":{"docs":{},"?":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"字":{"docs":{},"串":{"docs":{},"就":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"又":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"减":{"docs":{},"少":{"docs":{},"了":{"docs":{},"发":{"docs":{},"生":{"docs":{},"。":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"报":{"docs":{},"警":{"docs":{},"会":{"docs":{},"让":{"docs":{},"人":{"docs":{},"疲":{"docs":{},"倦":{"docs":{},",":{"docs":{},"使":{"docs":{},"人":{"docs":{},"对":{"docs":{},"报":{"docs":{},"警":{"docs":{},"失":{"docs":{},"去":{"docs":{},"警":{"docs":{},"惕":{"docs":{},"性":{"docs":{},",":{"docs":{},"使":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"恢":{"docs":{},"复":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}},"有":{"docs":{},"了":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"监":{"docs":{},"管":{"docs":{},"系":{"docs":{},"统":{"docs":{},"发":{"docs":{},"现":{"docs":{},"日":{"docs":{},"志":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"中":{"docs":{},"出":{"docs":{},"现":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"了":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}},"界":{"docs":{},"限":{"docs":{},"设":{"docs":{},"置":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"端":{"docs":{},"用":{"docs":{},"于":{"docs":{},"处":{"docs":{},"理":{"docs":{},"请":{"docs":{},"求":{"docs":{},"的":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}},"便":{"docs":{},"可":{"docs":{},"反":{"docs":{},"向":{"docs":{},"调":{"docs":{},"用":{"docs":{},"到":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"(":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"法":{"docs":{},"参":{"docs":{},"数":{"docs":{},"上":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"a":{"docs":{},")":{"docs":{},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"例":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"级":{"docs":{},"别":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"以":{"docs":{},"评":{"docs":{},"估":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"“":{"docs":{},"亚":{"docs":{},"健":{"docs":{},"康":{"docs":{},"”":{"docs":{},"程":{"docs":{},"度":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}},"虽":{"docs":{},"然":{"docs":{},"有":{"docs":{},"点":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"保":{"docs":{},"证":{"docs":{},"日":{"docs":{},"志":{"docs":{},"信":{"docs":{},"息":{"docs":{},"浓":{"docs":{},"度":{"docs":{},",":{"docs":{},"让":{"docs":{},"监":{"docs":{},"控":{"docs":{},"更":{"docs":{},"有":{"docs":{},"效":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},"的":{"docs":{},",":{"docs":{},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"、":{"docs":{},"i":{"docs":{},"o":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}},"调":{"docs":{},"度":{"docs":{},"器":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"达":{"docs":{},"到":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"时":{"docs":{},",":{"docs":{},"说":{"docs":{},"明":{"docs":{},"已":{"docs":{},"经":{"docs":{},"达":{"docs":{},"到":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"的":{"docs":{},"负":{"docs":{},"荷":{"docs":{},"上":{"docs":{},"限":{"docs":{},",":{"docs":{},"要":{"docs":{},"在":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"中":{"docs":{},"日":{"docs":{},"志":{"docs":{},"记":{"docs":{},"录":{"docs":{},"这":{"docs":{},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"以":{"docs":{},"发":{"docs":{},"出":{"docs":{},"监":{"docs":{},"控":{"docs":{},"警":{"docs":{},"报":{"docs":{},"。":{"docs":{},"记":{"docs":{},"得":{"docs":{},"注":{"docs":{},"意":{"docs":{},"不":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"多":{"docs":{},"次":{"docs":{},"记":{"docs":{},"录":{"docs":{},"哦":{"docs":{},"。":{"docs":{},"(":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"的":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"不":{"docs":{},"会":{"docs":{},"有":{"docs":{},"这":{"docs":{},"些":{"docs":{},"附":{"docs":{},"加":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},")":{"docs":{},"根":{"docs":{},"据":{"docs":{},"警":{"docs":{},"报":{"docs":{},"的":{"docs":{},"频":{"docs":{},"率":{"docs":{},",":{"docs":{},"已":{"docs":{},"经":{"docs":{},"决":{"docs":{},"定":{"docs":{},"扩":{"docs":{},"容":{"docs":{},"调":{"docs":{},"整":{"docs":{},"等":{"docs":{},"等":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"系":{"docs":{},"统":{"docs":{},"问":{"docs":{},"题":{"docs":{},"被":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"高":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.07954545454545454}},"可":{"docs":{},"用":{"docs":{},"组":{"docs":{},"件":{"docs":{},"要":{"docs":{},"容":{"docs":{},"忍":{"docs":{},"其":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"组":{"docs":{},"件":{"docs":{},"的":{"docs":{},"失":{"docs":{},"败":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}},"!":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"=":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}},"&":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},";":{"docs":{},"&":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0071174377224199285}}}}}}}}}}},"g":{"docs":{},"t":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0071174377224199285}}}}}},"'":{"docs":{},"/":{"docs":{},"'":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"{":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"[":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.019572953736654804}}},"]":{"docs":{},"*":{"docs":{},")":{"docs":{},"\\":{"docs":{},"\\":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.019572953736654804}}}},"z":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"到":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"忽":{"docs":{},"略":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"段":{"docs":{},"判":{"docs":{},"断":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{},"跨":{"docs":{},"机":{"docs":{},"房":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"是":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.011363636363636364}},"一":{"docs":{},"下":{"docs":{},"网":{"docs":{},"络":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"跨":{"docs":{},"机":{"docs":{},"房":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"防":{"docs":{},"火":{"docs":{},"墙":{"docs":{},"阻":{"docs":{},"挡":{"docs":{},",":{"docs":{},"请":{"docs":{},"联":{"docs":{},"系":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"了":{"docs":{},"都":{"docs":{},"快":{"docs":{},"疯":{"docs":{},"掉":{"docs":{},",":{"docs":{},"因":{"docs":{},"是":{"docs":{},"线":{"docs":{},"上":{"docs":{},"环":{"docs":{},"境":{"docs":{},"不":{"docs":{},"好":{"docs":{},"调":{"docs":{},"试":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"有":{"docs":{},"些":{"docs":{},"场":{"docs":{},"景":{"docs":{},"不":{"docs":{},"是":{"docs":{},"每":{"docs":{},"次":{"docs":{},"都":{"docs":{},"能":{"docs":{},"重":{"docs":{},"现":{"docs":{},"。":{"docs":{},"异":{"docs":{},"常":{"docs":{},"最":{"docs":{},"基":{"docs":{},"本":{"docs":{},"要":{"docs":{},"带":{"docs":{},"有":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"操":{"docs":{},"作":{"docs":{},"者":{"docs":{},",":{"docs":{},"操":{"docs":{},"作":{"docs":{},"目":{"docs":{},"标":{"docs":{},",":{"docs":{},"原":{"docs":{},"因":{"docs":{},"等":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"应":{"docs":{},"给":{"docs":{},"出":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"案":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"上":{"docs":{},"面":{"docs":{},"可":{"docs":{},"以":{"docs":{},"给":{"docs":{},"出":{"docs":{},":":{"docs":{},"\"":{"docs":{},"从":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"累":{"docs":{},"啊":{"docs":{},",":{"docs":{},"最":{"docs":{},"主":{"docs":{},"要":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"开":{"docs":{},"发":{"docs":{},"或":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"根":{"docs":{},"本":{"docs":{},"分":{"docs":{},"不":{"docs":{},"清":{"docs":{},",":{"docs":{},"没":{"docs":{},"办":{"docs":{},"法":{"docs":{},",":{"docs":{},"只":{"docs":{},"好":{"docs":{},"提":{"docs":{},"供":{"docs":{},"上":{"docs":{},"门":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"可":{"docs":{},"不":{"docs":{},"是":{"docs":{},"浮":{"docs":{},"云":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"最":{"docs":{},"好":{"docs":{},"把":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"环":{"docs":{},"境":{"docs":{},"信":{"docs":{},"息":{"docs":{},"一":{"docs":{},"并":{"docs":{},"打":{"docs":{},"进":{"docs":{},"去":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"给":{"docs":{},"日":{"docs":{},"志":{"docs":{},"输":{"docs":{},"出":{"docs":{},"做":{"docs":{},"个":{"docs":{},"包":{"docs":{},"装":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"处":{"docs":{},"理":{"docs":{},"掉":{"docs":{},",":{"docs":{},"免":{"docs":{},"得":{"docs":{},"忘":{"docs":{},"了":{"docs":{},"。":{"docs":{},"包":{"docs":{},"装":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},"如":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"在":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"在":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},",":{"docs":{},"却":{"docs":{},"采":{"docs":{},"用":{"docs":{},"了":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"模":{"docs":{},"型":{"docs":{},"类":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"些":{"docs":{},"都":{"docs":{},"是":{"docs":{},"核":{"docs":{},"心":{"docs":{},"吗":{"docs":{},"?":{"docs":{},"踢":{"docs":{},"掉":{"docs":{},"哪":{"docs":{},"些":{"docs":{},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"写":{"docs":{},"死":{"docs":{},"了":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"原":{"docs":{},"则":{"docs":{},"的":{"docs":{},"思":{"docs":{},"路":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"因":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"谈":{"docs":{},"谈":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"才":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"拆":{"docs":{},"分":{"docs":{},"后":{"docs":{},",":{"docs":{},"设":{"docs":{},"计":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"既":{"docs":{},"然":{"docs":{},"要":{"docs":{},"开":{"docs":{},"放":{"docs":{},",":{"docs":{},"那":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"核":{"docs":{},"心":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"设":{"docs":{},"计":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}},"泛":{"docs":{},"化":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"指":{"docs":{},":":{"docs":{},"将":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"逐":{"docs":{},"渐":{"docs":{},"抽":{"docs":{},"象":{"docs":{},",":{"docs":{},"取":{"docs":{},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"并":{"docs":{},"集":{"docs":{},",":{"docs":{},"新":{"docs":{},"加":{"docs":{},"功":{"docs":{},"能":{"docs":{},"总":{"docs":{},"是":{"docs":{},"套":{"docs":{},"入":{"docs":{},"并":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"步":{"docs":{},",":{"docs":{},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},",":{"docs":{},"插":{"docs":{},"件":{"docs":{},"式":{"docs":{},",":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}},"三":{"docs":{},"步":{"docs":{},",":{"docs":{},"全":{"docs":{},"管":{"docs":{},"道":{"docs":{},"式":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"自":{"docs":{},"身":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"均":{"docs":{},"使":{"docs":{},"用":{"docs":{},"截":{"docs":{},"面":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"实":{"docs":{},"现":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"步":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"只":{"docs":{},"封":{"docs":{},"装":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"化":{"docs":{},"因":{"docs":{},"子":{"docs":{},",":{"docs":{},"最":{"docs":{},"大":{"docs":{},"化":{"docs":{},"复":{"docs":{},"用":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}},"五":{"docs":{},"步":{"docs":{},",":{"docs":{},"分":{"docs":{},"层":{"docs":{},",":{"docs":{},"组":{"docs":{},"合":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}},"六":{"docs":{},"步":{"docs":{},",":{"docs":{},"整":{"docs":{},"理":{"docs":{},",":{"docs":{},"梳":{"docs":{},"理":{"docs":{},"关":{"docs":{},"系":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}},"四":{"docs":{},"步":{"docs":{},",":{"docs":{},"最":{"docs":{},"少":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"一":{"docs":{},"致":{"docs":{},"性":{"docs":{},"概":{"docs":{},"念":{"docs":{},"模":{"docs":{},"型":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"不":{"docs":{},"同":{"docs":{},"阶":{"docs":{},"段":{"docs":{},",":{"docs":{},"完":{"docs":{},"全":{"docs":{},"可":{"docs":{},"以":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"掉":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"为":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"随":{"docs":{},"着":{"docs":{},"服":{"docs":{},"务":{"docs":{},"化":{"docs":{},"的":{"docs":{},"推":{"docs":{},"广":{"docs":{},",":{"docs":{},"网":{"docs":{},"站":{"docs":{},"对":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},"逐":{"docs":{},"渐":{"docs":{},"增":{"docs":{},"多":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"并":{"docs":{},"行":{"docs":{},"开":{"docs":{},"发":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}},"优":{"docs":{},"势":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"先":{"docs":{},"级":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"够":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"后":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}},"成":{"docs":{},"为":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043}}},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}},"拉":{"docs":{},"成":{"docs":{},"分":{"docs":{},"支":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}},"版":{"docs":{},"本":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043}}},"前":{"docs":{},"有":{"docs":{},"试":{"docs":{},"用":{"docs":{},"阶":{"docs":{},"段":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}},"是":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"的":{"docs":{},"!":{"docs":{},"因":{"docs":{},"为":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}},"有":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"管":{"docs":{},"理":{"docs":{"release.html":{"ref":"release.html","tf":5.014084507042254}}}},"(":{"docs":{},"可":{"docs":{},"以":{"docs":{},"跨":{"docs":{},"了":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},")":{"docs":{},"定":{"docs":{},"期":{"docs":{},"升":{"docs":{},"级":{"docs":{},"平":{"docs":{},"摊":{"docs":{},"风":{"docs":{},"险":{"docs":{},"(":{"docs":{},"类":{"docs":{},"似":{"docs":{},"小":{"docs":{},"步":{"docs":{},"快":{"docs":{},"跑":{"docs":{},")":{"docs":{},"。":{"docs":{},"经":{"docs":{},"历":{"docs":{},"过":{"docs":{},"周":{"docs":{},"期":{"docs":{},"长":{"docs":{},"的":{"docs":{},"大":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"同":{"docs":{},"学":{"docs":{},"会":{"docs":{},"有":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"经":{"docs":{},"历":{"docs":{},",":{"docs":{},"三":{"docs":{},"方":{"docs":{},"库":{"docs":{},"版":{"docs":{},"本":{"docs":{},"长":{"docs":{},"时":{"docs":{},"间":{"docs":{},"不":{"docs":{},"升":{"docs":{},"级":{"docs":{},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"出":{"docs":{},"了":{"docs":{},"问":{"docs":{},"题":{"docs":{},"不":{"docs":{},"得":{"docs":{},"不":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"(":{"docs":{},"跨":{"docs":{},"了":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},")":{"docs":{},"风":{"docs":{},"险":{"docs":{},"巨":{"docs":{},"大":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"以":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"只":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"所":{"docs":{},"以":{"docs":{},"用":{"docs":{},"户":{"docs":{},"需":{"docs":{},"要":{"docs":{},"积":{"docs":{},"极":{"docs":{},"跟":{"docs":{},"进":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"线":{"docs":{},"上":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"只":{"docs":{},"会":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}},":":{"docs":{},"低":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"相":{"docs":{},"对":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},"才":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},"的":{"docs":{},"提":{"docs":{},"高":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}},"经":{"docs":{},"过":{"docs":{},"一":{"docs":{},"个":{"docs":{},"试":{"docs":{},"用":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"保":{"docs":{},"持":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"让":{"docs":{},"直":{"docs":{},"接":{"docs":{},"升":{"docs":{},"级":{"docs":{},"。":{"docs":{},"(":{"docs":{},"这":{"docs":{},"个":{"docs":{},"称":{"docs":{},"为":{"docs":{},"“":{"docs":{},"夕":{"docs":{},"阳":{"docs":{},"条":{"docs":{},"款":{"docs":{},"”":{"docs":{},")":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}},"试":{"docs":{},"用":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"。":{"docs":{},"找":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"试":{"docs":{},"用":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}},"《":{"docs":{},"开":{"docs":{},"发":{"docs":{},"指":{"docs":{},"南":{"docs":{},"》":{"docs":{},"翻":{"docs":{},"译":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}},"用":{"docs":{},"户":{"docs":{},"指":{"docs":{},"南":{"docs":{},"》":{"docs":{},"翻":{"docs":{},"译":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}},"低":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.045454545454545456}}},"修":{"docs":{},"改":{"docs":{},"后":{"docs":{},"通":{"docs":{},"过":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"复":{"docs":{},"代":{"docs":{},"码":{"docs":{},"前":{"docs":{},"先":{"docs":{},"写":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"建":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"时":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"功":{"docs":{},"能":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"反":{"docs":{},"馈":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"工":{"docs":{},"程":{"docs":{},"。":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"待":{"docs":{},"定":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.22348484848484848}}}},"文":{"docs":{},"档":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}},"未":{"docs":{},"认":{"docs":{},"领":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.10984848484848485}}}}},"朱":{"docs":{},"启":{"docs":{},"恒":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"流":{"docs":{},"程":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"白":{"docs":{},"文":{"docs":{},"志":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"罗":{"docs":{},"立":{"docs":{},"树":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"计":{"docs":{},"划":{"docs":{},"完":{"docs":{},"成":{"docs":{},"时":{"docs":{},"间":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"认":{"docs":{},"领":{"docs":{},"者":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"贡":{"docs":{},"献":{"docs":{"contribution.html":{"ref":"contribution.html","tf":5.003787878787879}}}},"闾":{"docs":{},"刚":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"讲":{"docs":{},"一":{"docs":{},"遍":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}},"述":{"docs":{},"一":{"docs":{},"遍":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}},"#":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"事":{"docs":{},"件":{"docs":{},"通":{"docs":{},"知":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"全":{"docs":{},"部":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"共":{"docs":{},"享":{"docs":{},"连":{"docs":{},"接":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"则":{"docs":{},"将":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"后":{"docs":{},",":{"docs":{},"在":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"会":{"docs":{},"继":{"docs":{},"续":{"docs":{},"发":{"docs":{},"送":{"docs":{},"到":{"docs":{},"上":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"。":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"连":{"docs":{},"接":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"闭":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"还":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"如":{"docs":{},"何":{"docs":{},"避":{"docs":{},"免":{"docs":{},"部":{"docs":{},"分":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}},"坏":{"docs":{},"味":{"docs":{},"道":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":5.00314465408805}}}}},"根":{"docs":{},"据":{"docs":{},"@":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"注":{"docs":{},"解":{"docs":{},"上":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},",":{"docs":{},"从":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"获":{"docs":{},"致":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"实":{"docs":{},"际":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"名":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"此":{"docs":{},"项":{"docs":{},"功":{"docs":{},"能":{"docs":{},"自":{"docs":{},"动":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"连":{"docs":{},"接":{"docs":{},"重":{"docs":{},"试":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"开":{"docs":{},"启":{"docs":{},"发":{"docs":{},"送":{"docs":{},"重":{"docs":{},"试":{"docs":{},"功":{"docs":{},"能":{"docs":{},"(":{"docs":{},"即":{"docs":{},"发":{"docs":{},"送":{"docs":{},"数":{"docs":{},"据":{"docs":{},"时":{"docs":{},"如":{"docs":{},"果":{"docs":{},"连":{"docs":{},"接":{"docs":{},"已":{"docs":{},"断":{"docs":{},"开":{"docs":{},",":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"重":{"docs":{},"新":{"docs":{},"建":{"docs":{},"立":{"docs":{},"连":{"docs":{},"接":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"和":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"直":{"docs":{},"连":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"确":{"docs":{},"定":{"docs":{},"要":{"docs":{},"调":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}},"策":{"docs":{},"略":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"默":{"docs":{},"认":{"docs":{},"开":{"docs":{},"启":{"docs":{},"了":{"docs":{},"连":{"docs":{},"接":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"给":{"docs":{},"定":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"上":{"docs":{},"调":{"docs":{},"用":{"docs":{},"都":{"docs":{},"有":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}},"逻":{"docs":{},"辑":{"docs":{},"分":{"docs":{},"离":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"长":{"docs":{},"连":{"docs":{},"接":{"docs":{},"进":{"docs":{},"行":{"docs":{},"数":{"docs":{},"据":{"docs":{},"传":{"docs":{},"输":{"docs":{},",":{"docs":{},"已":{"docs":{},"达":{"docs":{},"到":{"docs":{},"减":{"docs":{},"少":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"连":{"docs":{},"接":{"docs":{},"数":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"当":{"docs":{},"有":{"docs":{},"数":{"docs":{},"据":{"docs":{},"请":{"docs":{},"求":{"docs":{},"时":{"docs":{},"在":{"docs":{},"做":{"docs":{},"连":{"docs":{},"接":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}},"技":{"docs":{},"术":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},"测":{"docs":{},"试":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5.032258064516129}}}}}}}}}},"length":4019},"corpusTokens":["!","!=","\"","\"$deploy_home\"","\"$dump_pids\"","\".\\c\"","\".class\");","\"2.0.0\");","\"dubbo\"))","\"dump","\"hello","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},表示先在","\"ok!\"","\"provider\",","\"script\"))","\"script\")).addparameter(\"type\",","\"the","\"transport\"})","\"xxx\")","\"号分隔","#","$0`","$2}'`","$adp","$dump_dat","$dump_dir","$dump_dir/free.dump","$dump_dir/iostat.dump","$dump_dir/jinfo","$dump_dir/jmap","$dump_dir/jstack","$dump_dir/jstat","$dump_dir/lsof","$dump_dir/mpstat.dump","$dump_dir/netstat.dump","$dump_dir/sar.dump","$dump_dir/uptime.dump","$dump_dir/vmstat.dump","$dump_pid","$dump_root","$host_nam","$java_home/bin/jinfo","$java_home/bin/jmap","$java_home/bin/jstack","$java_home/bin/jstat","$pid","$pid.dump","${dubbo.registry.address}","${home}/.m2/repository,","&amp;&amp;","&gt;","'/')","'{print","()","(activ","(applic","(file","(files.size()","(matcher.find()","(servic","(technolog","(throwabl","(url","(urls.hasmoreelements())","(version","(实现client接口)","(实现cluster接口)","(实现compiler接口)","(实现container接口)","(实现dispatcher接口)","(实现exchangeclient接口)","(实现exchanger接口)","(实现exchangeserver接口)","(实现exporterlistener接口)","(实现exporter接口)","(实现extensionfactory接口)","(实现filter接口)","(实现invokerlistener接口)","(实现invoker接口)","(实现loadbalance接口)","(实现loggeradapter接口)","(实现merger接口)","(实现monitorfactory接口)","(实现monitor接口)","(实现networker接口)","(实现objectinput接口)","(实现objectoutput接口)","(实现pagehandler接口)","(实现protocol接口)","(实现proxyfactory接口)","(实现registryfactory接口)","(实现registry接口)","(实现serialization接口)","(实现server接口)","(实现statuschecker接口)","(实现telnethandler接口)","(实现threadpool接口)","(实现transporter接口)","(实现validation接口)","(称为幽灵连接),","(纯文本文件,内容为:xxx=com.xxx.xxxcachefactory)","(纯文本文件,内容为:xxx=com.xxx.xxxcluster)","(纯文本文件,内容为:xxx=com.xxx.xxxcompiler)","(纯文本文件,内容为:xxx=com.xxx.xxxcontainer)","(纯文本文件,内容为:xxx=com.xxx.xxxdispatcher)","(纯文本文件,内容为:xxx=com.xxx.xxxexchanger)","(纯文本文件,内容为:xxx=com.xxx.xxxexporterlistener)","(纯文本文件,内容为:xxx=com.xxx.xxxextensionfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxfilter)","(纯文本文件,内容为:xxx=com.xxx.xxxinvokerlistener)","(纯文本文件,内容为:xxx=com.xxx.xxxloadbalance)","(纯文本文件,内容为:xxx=com.xxx.xxxloggeradapter)","(纯文本文件,内容为:xxx=com.xxx.xxxmerger)","(纯文本文件,内容为:xxx=com.xxx.xxxmonitorfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxnetworker)","(纯文本文件,内容为:xxx=com.xxx.xxxpagehandler)","(纯文本文件,内容为:xxx=com.xxx.xxxprotocol)","(纯文本文件,内容为:xxx=com.xxx.xxxproxyfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxregistryfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxrouterfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxserialization)","(纯文本文件,内容为:xxx=com.xxx.xxxstatuschecker)","(纯文本文件,内容为:xxx=com.xxx.xxxtelnethandler)","(纯文本文件,内容为:xxx=com.xxx.xxxthreadpool)","(纯文本文件,内容为:xxx=com.xxx.xxxtransporter)","(纯文本文件,内容为:xxx=com.xxx.xxxvalidation)","(造轮者)","*","*/","+","+%y%m%d%h%m%s`","++;","...","...);","......,多好的同学,看到错误的人复制一下就完事了,我们该学学。可以把常见的错误故意犯一遍,看看错误信息能否自我搞定问题,","...\\c\"","/**","//","//...","/bin/netstat","/usr/bin/fre","/usr/bin/iostat","/usr/bin/mpstat","/usr/bin/sar","/usr/bin/uptim","/usr/bin/vmstat","/usr/sbin/lsof","0","0%","0)","02","04","1","1)","1.","1.5","10","10.20.130.20","10.20.130.20:20880","10.20.16.3","100","1000","11","12","127.0.0.1","13","1;","1。","1,serviceconfig","1,放置扩展点配置文件","1:","2","2.","2.2.1","2.4.x","2.4.x。是","2.5.x","2.5.x。加新功能的版本,会给对新功能有需求的应用试用。","2.6.0,作为新功能开发版本。","20%","2012","20880","27","2>&1","2。","2,serviceconfig","2:","3","3.","30","3。","3,referenceconfig","4","4.","4,referenceconfig","5","5.","5.1","5.10","5.11","5.12","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.2","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.3","5.4","5.5","5.6","5.7","5.8","5.9","50","5,而该","6","6.","7","7.","8","8.1","8.2","8.3","8.4","8.5","8.6","8.7","9","90%","9\\\\.\\\\","9][0",":",";","=","==",">",">provid","?","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@adaptive({\"server\",","@extens","@help(parameter=\"...\",","@param","@return","@see","@throw","[","]*)\\\\.jar\");","];","abstract","abstractcli","abstractclusterinvoker(directory)","abstractexport","abstractinvok","abstractproxyinvok","abstractserv","abstractxxx。","ac","accesslog,","action","action,dubbo","action,里面有个","activ","adapt","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","all,","annot","aop","aop,即","api","api,其它各层均为","api,用户通过","applicationcontext,dubbo","appop","arg","arg1,","arg2);","args)","args),后来,有了无接口调用的需求,就是没有接口方法也能调用,并将","args),导致不管是不是无接口调用,都得把","attach","avro","b","bean","beanfactory,maven","bean,strut","befor","bind()","bind(url","boolean","bu","bug","bugfix","bugfix,升级第三位版本号。","bugfix,推广使用此版本。如何可行,可以推进应用在期望的时间点内升级到","bug,不小心改到了这里,直接引爆故障。对于这个例子,一个原则就是永远不要区分","bug,或修改框架本身,可以从","bug,比如:获取程序的版本号,会通过扫描","build","byte[]","c","c:\\document","cach","cache(url","cachefactori","cacti","callback","car","carmak","carmaker、wheelmak","carmaker(造车者)、wheelmak","catch","catch),而如果它抛出异常会导致主流程异常,这是我们不希望看到的。但这里要控制个度,不要随意","catch,更不要无声无息的吃掉异常。","cdi","cglib","chain,","chain.invoke(inv);","chang","channel","channel,","channelhandl","check","check()","checkduplicate(class","checkduplicate(cls.getname().replace('.',","checkduplicate(str","checklist","class","class),就优先将它设计成不变类。不变类有天然的并发共享优势,减少同步或复制,而且可以有效帮忙分析线程安全的范围。就算是可变类,对于从构造函数传入的引用,在类中持有时,最好将字段","class[]","classload","classpath","clean","client","client,","clone","cls)","cls,","cls.getpackage().getimplementationversion();","cls.getpackage().getspecificationversion();","cls.getprotectiondomain().getcodesource().getlocation().getfile();","cluster","cluster,","coc","code","code(正常流程/异常流程)","codec","collect","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}的参数。","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}的返回值。","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.rpcexception;","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.alibaba.dubbo.xxx.yyyinvokerwrapp","com.alibaba.xxx.xxxprotocol。dubbo","com.alibaba.xxx;","com.xxx;","comment","common","compat","compil","config","connect","connect(url","consum","consumer,","consumers,","contain","container,","context","context.xml","contributor","convent","count(url","count,","cover","createexporter(str","createexporter(url","d","dbunit。","dcom.xxx.xxxservice=dubbo://10.1.1.1:1234","ddubbo:application.logger=xxx","declipse.workspace=/path/to/the/workspace/","default","default\",剔除添加所有缺省扩展点。","defaultvers","defaultversion)","defaultversion;","default,表示缺省扩展点插入的位置。比如:filter=\"xxx,default,yyy\",表示","delay,而网站的同学也希望参与进来,加上领域的推动,所以平台计划将部分项目对公司内部开放,让大家一起来实现,dubbo","delegate.error(msg","deleteuser()。","deleteuser(id),删除用户并返回被删除的用户,考虑改为","democlientact","demoservic","demoservice)","demoservice.sayhello(\"world\"","demoservice;","demoserviceimpl","deploy_home=`dirnam","deserialize(paramet","destroy","destroyed(invok","detail=\"...\")","direct,","directori","directory)","directory,","dispatch","dispather:","dmaven.test.skip","doc","doclose()","doconnect()","doinvoke(inv);","doinvoke(invoc","done","doopen()","down)下来。","dsl","dubb","dubbo","dubbo.jar","dubbo.properties,因为该约定经常造成配置冲突。","dubbo.properties,改为全","dubbo://","dubbo://servic","dubbo>","dubbobeandefinitionpars","dubbocodec","dubboinvoker、","dubbonamespacehandler。","dubboprotocol","dubboprotocol的","dump","dump_date=`d","dump_dir=$dump_root/dump","dump_pids=`p","dump_root=$output_home/dump","dump,进行自动备份,这样就不会有人为疏忽。dump脚本示例:","duplic","duplicate()","duplicate.checkduplicate(\"xxx.properties\");","duplicate.checkduplicate(xxx.class);","e","e)","e);","easymock,集成测试用","echo","echo,","eclips","eclipse:configur","eclipse:eclips","empti","enumer","error","error(str","errorcod","except","exchang","exchangechannel,","exchangecli","exchangeclient,","exchangehandl","exchanger,","exchangeserv","exectorservic","execute()","execute(),那拦截器接口通常为","execute(execution),原理一样。当然,实现方式可以任意,上面只是举例。","execution,","executor","exit","export","export()","export()传入的invoker由框架实现并传入,协议不需要关心。","export()必须是幂等的,也就是暴露同一个url的invoker两次,和暴露一次没有区别。","export(dubbo://provid","export(invok","export(registry://registri","export(str","export(url","exported(export","exporter)","exporter,","exporterlisten","exporter,此处用于","exportlistener,","extend","extens","extension\");","extensionfactori","extensionload","f","factori","factory、ioc、osgi","fail","failed?","failover,","failsaf","fi","file","file.endswith(\".jar\"))","file.length()","files);","files.add(file);","files.size()","filter","filterchain","filter,而不是覆盖。比如:","final","final/html/introduction.html","final,以免被中途误修改引用。不要以为这个字段是私有的,这个类的代码都是我自己写的,不会出现对这个字段的重新赋值。要考虑的一个因素是,这个代码可能被其他人修改,他不知道你的这个弱约定,fin","find","fix","fixed,","foo1\",剔除添加缺省扩展点","foo1。比如:filter=\"","fork","ga","gccapac","gcutil","generalservic","generalserviceimpl","generic,","get(object","getbean","getcache(url","getchannel()","getchannel(inetsocketaddress","getchannels()","getexecutor()","getextension(class","getinvok","getinvoker(t","getlogger(url","getmonitor(url","getname()","getproxy(invok","getregistry(dubbo://registri","getregistry(url","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","getuser()","getvalidator(url","getversion()","getversion(){","getversion(class","getversion(version.class,","git","github","grep","grizzli","group","handler)","handler);","hashset();","head","heap","hello","hessian","hessianrpcinvoker、","histo","host","host,","host/com.alibaba.dubbo.registry.registryservice?export=url.encode(\"dubbo://servic","host/com.alibaba.dubbo.registry.registryservice?refer=url.encode(\"consumer://consum","host/com.foo.fooservice?version=1.0.0\")。","host/com.foo.fooservice?version=1.0.0\"),","host/com.foo.fooservice?version=1.0.0。","host/com.foo.fooservice?version=1.0.0,然后基于扩展点自适应机制,通过提供者","host_name=`hostname`","http","http://javatar.iteye.com/blog/1041832","http://javatar.iteye.com/blog/1056664","http://javatar.iteye.com/blog/690845","http://javatar.iteye.com/blog/706098","http://javatar.iteye.com/blog/804187","http://javatar.iteye.com/blog/949527","http://oldratlee.com/380/tech/java/robust","https://github.com/alibaba/dubbo","https://github.com/alibaba/dubbo/tag","i);","ic","id","idea","idea:idea","id,在获取","if(是否有url类型方法参数?)","if(是否有方法类型上有url属性)","if(获取的url","illegalargumentexception(\"url","illegalstateexception(\"fail","illegalstateexception。如果不设置则缺省使用","impel","impl","impl.refer();","impl;","implemenet","implement","implement.html","import","inetaddress.getlocalhost()","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","inf/dubbo/com.alibaba.dubbo.container.container:","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","inf/dubbo/com.alibaba.dubbo.rpc.filter:","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","inf/dubbo/com.alibaba.dubbo.rpc.protocol,内容为:","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","inf/dubbo/com.alibaba.dubbo.validation.validation:","inf/dubbo/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔。","inf/servic","inf/services/","inf/services/com.alibaba.dubbo.rpc.protocol,内容为","inf/spring.handl","info","info(str","init","injvminvoker、","input)","inputstream","instal","int","intellij","interfac","interface)","introduct","inv)","invoc","invocation)","invocation,","invocationhandler,","invok","invoke()","invoke(),那拦截器接口通常为","invoke(invoc","invoke(invocation),invoc","invoke(invok","invoke(method","invoke(str","invoker)","invoker,","invoker.invoke(invocation);","invokerlisten","invokerlistener,","invokers,","invoker,也就是去掉","invoker,减少概念。","invoker,这样其它人只要关注","invoker:","invoker:服务提供","ioc","ioexcept","ip","ip、使用的是哪个注册中心;调用的是哪个服务、哪个方法等等。这些信息如果不给出,那么事后人工收集的,问题过后现场可能已经不能复原,加大排查问题的难度。","isavail","jar","java","java.util.concurrent.executor;","java_home=/usr/java","javadoc","javaey","jboss","jcr/jsr283","jdbc","jdk","jetti","jira","jms&activemq","jmx","jndi","jrobin","jruby.jar","json","jsonact","jsonaction,这就是","jsonrender","jsr140&slp","jsr181&cxf(webservice)","jsr311&jsr339(restfulwebservice)","jta/xa分布式事务","junit","jvm","key","key)","key,","key1","key2","key,","key,即可以代理真正的实现类上,可以动态生成。","key,如果该","key,缓存返回结果。","kill","kit),用户增加一种扩展实现,只需通过","languag","lazi","lazy连接","ldap","limit","limitfilt","list","list>","listen","listener)","listener);","loadbal","loadbalance)","loadbalance,","log","log4j","logger","logger.error(\"dupl","logger.error(e.getmessage(),","loggeradapt","loggerfactory.getlogger(version.class);","logstash","logutil","lookup(url","m2_repo","main","makecar()","makecar();","makecar(url","makewheel","makewheel();","makewheel(url","manifest","map","map,","map,可以认为是可靠的,而写入数据库等,可以认为是不可靠的。开发人员必须在写每一行代码时,都注意它的可靠性与否,在代码中尽量划分开,并对失败做异常处理,并为容错,自我保护,自动恢复或切换等补偿逻辑提供清晰的切入点,保证后续增加的代码不至于放错位置,而导致原先的容错处理陷入混乱。","master","matcher","matcher.group(1);","matcher.groupcount()","maven","maven_opt","maven_opts=","maven项目结构:","max)","merge(directori","merge(t...","merger","messag","message)","message,","meta","method","method!\");","method,","methodname,","microkernel","mina","mina,","mkdir","mock","mock,","monitor","monitor,","monitorfactori","monitorfactory,","monitorservic","msg)","msg,","mvn","n","nagio","name)","name);","name;","netti","netty,","network","new","newinstance()","notify();","notify(dubbo://provid","notify(list","notify(route://registri","notifylisten","notifylistener.java:","null","null\");","null)","object","object[]","objectinput","objectinput,","objectoutput","objectoutput,","object,所以将实例方法存储在","ocp","onchanged()。比如远程调用框架,当网络断开或连上应该发出一个事件,当出现错误也可以考虑发出一个事件,这样外围应用就有可能观察到框架内部的变化,做相应适应。","onreturn","onreturn/onerror...","orm","osgi","osgi,","osgi,却为","osgi,这样序列化时,io","output)","output_home=~/output","outputstream","overrides,允许只通知其中一种类型,但该类型的数据必须是全量的,不是增量的。","owner","owner,确保","p","packag","pagehandl","paramet","parameters,","parametertyp","parametertypes,","params);","partner","path","path)","pattern","pattern.compile(\"([0","patternercheck","pid","plexus。通常核心是不应该带有功能性的,而是一个生命周期和集成容器,这样各功能可以通过相同的方式交互及扩展,并且任何功能都可以被替换。如果做不到微核,至少要平等对待第三方,即原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到。原作者要把自己也当作扩展者,这样才能保证框架的可持续性及由内向外的稳定性。","plugin","plugin.xml","plugin.xml,struts2","plugin,dubbo","pojo","port,","prefer","privat","program","properti","propertyplaceholderconfigur","protect","protobuf","protocol","protocol)","protocol,","protocol;","protocolfilterwrapp","protocollistenerwrapp","provid","provider,","proxi","proxy,","proxyfactori","proxy,用户代码通过这个","public","publish","publisher,","push","put(object","queue","r","racecar","racecar(wheel,","racecarmak","read(file))","ref","ref(如:helloworldimpl),然后通过","refer","refer()","refer()返回的invoker由协议实现,协议通常需要在此invoker中发送远程请求。","refer(class","refer(dubbo://provid","refer(registry://registri","referenceconfig","referenceconfig.get()","referred(invok","register(dubbo://provid","register(url","registri","registry,","registry://","registry://registri","registryfactori","registryfactory,","registryfactory.java:","registryprotocol","registryservic","registryservice.java:","remot","remoteaddress)","remoteexcept","remotingexcept","remotingexception;","remotingexception{","render","request","request,","request/respons","request,所以在","resourc","respons","response。如果再来一个会话消息发送需求,那就再加一个","result","result;","results)","return","returntypes,","rmi","rmi,","rmi/dubbo/web","rmiinvoker、","rmiprotocol类的","rmi协议则不需要使用此包。","rout","route,","router,","routerfactori","routes,","routinginvokergroup","routing。所以,将","rpc","rpcexcept","rpcexception;","rpcexception。","rubi","rubyscriptengin","ruby,而不是真正失败的原因。","run","run(url","run?而哪些又是不能踢掉的?基于这样考虑,可以将","sa","sayhello(str","schame","schema,配置简化后很方便。当然,也有它的缺点,就是强依赖","scope","scriptengine,通过","select(list>","serial","serialization,","serialize(paramet","server","server,","servic","service,","serviceconfig","serviceconfig,","serviceconfig.export()","serviceload","servicemanag","serviceproxi","service,napoli","session","sessionrequest/sessionrespons","session,不需要","set","setdemoservice(demoservic","setter","settings\\.m2\\repositori","setwheelmaker(wheelmak","simpledeploy","simpleschedul","skeleton,","snmp","socket","source:jar","spi","spi。","spring","spring,可以提编程接口做了配套方案。","sql","src","standlon","start()","started!\"","static","staticmap","statist","statistics)","statu","statuscheck","sticki","stop()","string","string[]","string[]。如果选用增量式扩展,应该是保持原有接口不变,增加一个","strut","stub","subscribe(dubbo://registri","subscribe(url","subscriber,","subvers","suffix(file)).addparameter(\"rule\",","summary=\"...\",","super(invoker);","super(type,","super(url,","super.unexport();","support","svn","system_properties_mode_override,可以通过","t","tck","tck,做一个","tck,即可确保与框架的其它部分兼容运行,可以有效提高整体健状性,也方便第三方扩展者接入,加速开源社区的成熟。","tcp","teardown","telnet","telnet(channel","telnethandl","telnethandler,","templat","test","testng,数据库测试用","this.demoservic","this.wheelmak","thread.currentthread().getcontextclassloader().getresources(path);","threadpool","threadpool:","thrift","throw","throwabl","throwable;","ticket","timeout","todo","token","token,","tomcat/jboss","tool","transport","transporter,","tri","try...fin","type","type,","type1","type2","ubbo,隐藏","uddi","udp","unexport()","unexported(export","unix","unregister(url","unsubscribe(url","unsupportedoperationexception(\"i","updat","url","url)","url);","url,","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.get(\"wheel.type\")","url.getfile();","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","urls);","urls.nextelement();","url参数全部用小写,多个单词用\".\"号分隔","url,但","url,先注册到注册中心。","url,如:","us","util","valid","validate(invoc","valu","value)","value)传递配置信息。","value,使用缺省的扩展。如果没有设定缺省扩展,则方法调用会抛出","value,使用缺省的扩展(在接口的","value,则使用","veloc","velocityact","velocityaction,要用","velocityrender","version","version()","version.getversion(),","version.length()","version;","version_pattern","version_pattern.matcher(file);","void","wait();","warn","web","web.xml","webserviceinvok","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","width","window","workspac","wrapper","wrapper类内容:","write","xml","xmx1024m","xsocket","xx:maxpermsize=512m","xxx","xxx,yyy,aaa,bbb","xxx.jar","xxx=com.alibaba.xxx.xxxprotocol","xxx=com.xxx.xxxcachefactori","xxx=com.xxx.xxxclust","xxx=com.xxx.xxxcompil","xxx=com.xxx.xxxcontain","xxx=com.xxx.xxxdispatch","xxx=com.xxx.xxxexchang","xxx=com.xxx.xxxexporterlisten","xxx=com.xxx.xxxextensionfactori","xxx=com.xxx.xxxfilt","xxx=com.xxx.xxxinvokerlisten","xxx=com.xxx.xxxloadbal","xxx=com.xxx.xxxloggeradapt","xxx=com.xxx.xxxmerg","xxx=com.xxx.xxxmonitorfactori","xxx=com.xxx.xxxnetwork","xxx=com.xxx.xxxpagehandl","xxx=com.xxx.xxxprotocol","xxx=com.xxx.xxxproxyfactori","xxx=com.xxx.xxxregistryfactori","xxx=com.xxx.xxxrouterfactori","xxx=com.xxx.xxxseri","xxx=com.xxx.xxxstatuscheck","xxx=com.xxx.xxxtelnethandl","xxx=com.xxx.xxxthreadpool","xxx=com.xxx.xxxtransport","xxx=com.xxx.xxxvalid","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxcluster","xxxcluster.java","xxxcluster.java:","xxxcompil","xxxcompiler.java","xxxcompiler.java:","xxxcontain","xxxcontainer.java","xxxcontainer.java:","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","xxxfilter","xxxfilter.java","xxxfilter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","xxxmerger","xxxmerger.java","xxxmerger.java:","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","xxxprotocol","xxxprotocol(protocol","xxxprotocol.java","xxxprotocol.java:","xxxprotocolwrapp","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","xxxserial","xxxserialization.java","xxxserialization.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","xxxwrapper,基类都命名为","z","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","{}","|","|awk","||","}","};","↩","《开发指南》翻译","《用户指南》翻译","一些操作","一些设计上的基本常识","一样可以","一样约定一个覆盖配置文件,在程序外部,修改部分配置,便于测试。","上","上一点的子问题。dubbo","上发表的系列文章。","上图是服务提供者暴露服务的主过程:","上图是服务消费的主过程:","上找","上浏览源代码","上面代码中的","上面的设计,不自觉的就将","上面这个类会被封装成为一个","下加载该配置。我们平台的很多项目也使用类似策略,如:dubbo.properties,comsat.xml","下放一个约定的配置,如果项目中有多个,通常会取jvm加载的第一个,为了不被这么低级的问题折腾,和上面的重复jar包一样,在配置加载的地方,加上:","下放置接口类全名文件,内容为每行一个实现类类名,就像","下的路径是","下约定一个以项目为名称的","下面我们用一个精简的图来说明最重要的两种","下面是","不会版本过多,导致开发和维护成本剧增","不再开发,应用碰到","不存在,导致","不是扩展点的真正实现。它的用途主要是用于从","不管选哪种方式,所有配置项,都应保持同一风格,dubbo","不能有子类型,所有类型信息用","不要控制外部对象的生命周期","与","世界里,比较常规的做法,是在","世界里,通常是约定在每个","严格约定warn、error级别记录的内容","个版本并行开发","中","中。","中。新加的","中加上一个全函数的","中加入:","中发送远程请求,export()","中取得回调服务实例的","中实现。此处需要考虑将此逻辑与","中导入","中放置文件:meta","中没有支持","中的下一个(如果不是最后一个),避免碰撞。","中的任何一个","中的加密算法扩展,脚本引擎扩展,新的","中的多个服务,共享连接是说","中碰到有两个相关的场景。","中设定的值)。比如,string[]","中说明。","中返回的实际上是","中途变更时,允许不同类型的数据分开通知,比如:providers,","中配置","中,protocol","中,此处实现需要进行改造。","中,饱和策略是丢弃数据,等待结果也只是请求的超时。","为中心,只有到了暴露给用户使用时,才用","为中心,可以直接初始化配置类,也可以通过","为中心,扩展接口为","为中心,由外层将","为了在传输时能够对回调接口实例进行转换,自动暴露与自动引用目前在","为了更好的解释上面这张图,我们结合服务消费和提供者的代码示例来进行说明:","为服务容器,用于部署运行服务,没有在层中画出。","为统一接口,以","为试点项目之一。","主要原理:","主要原理:consum","主过程为","之前先","之前,yyi","之后。","之间的网络不通,请在","也代表拦截器行为本身,这样上一拦截器的","也可以直接在","也可以通过以下的","也是扩展点则会注入","也能复用序列化等实现。这样,需为传输方式,客户端实现,服务器端实现,协议头解析,数据序列化,都留出不同扩展点。","事件通知","交互,然后发现,原来同步消息发送是会话消息的一种特殊情况,所有场景都传","什么原因","什么是会话?就是一次交互过程。会话中重要的概念是上下文,什么是上下文?比如我们说:“老地方见”,这里的“老地方”就是上下文信息。为什么说“老地方”对方会知道,因为我们前面定义了“老地方”的具体内容。所以说,上下文通常持有交互过程中的状态变量等。会话对象通常较轻,每次请求都重新创建实例,请求结束后销毁。简而言之:把元信息交由实体域持有,把一次请求中的临时状态由会话域持有,由服务域贯穿整个过程。","从","从多个服务提者方中选择一个进行调用","从多个服务提者方中选择一个进行调用。","从文件加载路由规则","从文件加载路由规则:","从注册中心发现引用服务:","从注册中心订阅服务:","仓库。","仓库。通过","付出了代价。而如果采用增量式扩展方式,非","代替,","代理了扩展点。","代码注释写清楚,用中文无妨","代码签出","代码编译器,用于动态生成字节码,加速调用。","代码风格","代表层或模块,蓝色的表示与业务有交互,绿色的表示只对","代表部署逻辑拓扑节点。","以","以上内容都写到ticket的评论上","以上的版本","以字符串传递,不停的解析和拼装,没有一个","以扩展","以用户的方式运行一下功能","任何框架或组件,总会有核心领域模型,比如:spring","任务","优先级","优势","会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。","会为扩展点自动生成自适应扩展点类(通过字节码),并将其实例注入。","会全","会同时接收事件,而去重连另一个注册中心。client","会执行扩展点的拼装操作。","会报一个错,错误信息写着:请在","会火速","会被清除。数据库正常时,这个机制运行良好。但是数据库负荷高时,其上的每个操作都会很慢。这就出现:","传入的","传参,不要自定义","传给","传输层和","传输扩展","传输,而","伪代码","伪装成一个","但它们的作用是一样的,只是一个在客户端,一个在服务器端,却采用了不一样的模型类。","但这些都是核心吗?踢掉哪些,rpc","低","住所有需求,允许外置行为,是框架的基本扩展方式。这样,如果有人想在远程调用前,验证下令牌,验证下黑白名单,统计下日志;如果有人想在","作为","作为上下文信息贯穿整个扩展点设计体系。","作为主干版本的开发,使用分支作为维护版本。可以通过","作为构建工具。","作为要","作为远程服务暴露、调用和治理的解决方案,是应用运转的经络,其本身实现健壮性的重要程度是不言而喻的。","作为配置信息的统一格式,所有扩展点都通过传递","你可以约定:","使用","使用d","使用一致模型:","使用以下命令做一次构建","使用以下命令来生成","使用如下的版本开发模式来保障两者。","使用接口和","使用的","使用该url参数","使用该url属性","依赖。","依赖关系","侦听服务,并接收客户端发来的各种请求,通讯细节由","保持","保持单元测试用例的运行速度,不要将性能和大的集成用例放在单元测试中。","保持单元测试的每个用例都用","保持尽可能少的概念,有助于理解,对于开放的系统尤其重要。另外,各接口都使用一致的概念模型,能相互指引,并减少模型转换,","保证线程安全性和可见性","信息交换层,transport","信息交换层:封装请求响应模式,同步转异步,以","信息交换扩展","信息交换语义。","信息获取","修复代码前先写测试用例","修复代码前先建","修复时","修改后通过","值。","值,来决定代理到哪个实际扩展点。","做为参考值,如果消费方没有配置,就以提供方的配置为准,相当于消费方继承了提供方的建议配置值。而注册中心在传递配置时,也可以在中途修改配置,这样就达到了治理的目的,继承关系相当于:服务消费者","做为扩展方式,要用","做为配置。有时候这类配置也可以用","允许uri相同但参数不同的url并存,不能覆盖。","允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.barservice&version=1.0.0","允许自定义","先看一下","全部","公共契约","公共契约,希望所有扩展点遵守。","公共逻辑模块:包括","共享连接","关于每种协议如","关系说明","关联","其中,refer()","其实是包装的下一拦截器的过程,直到最后一个拦截器的","其实都是","内的","内部交互。","内部再划为","再再比如:无状态消息发送,很简单,序列化一个对象发过去就行。后来有了同步消息发送需求,需要一个","再比如,url","再比如,协议扩展,扩展者可能只是想替换序列化方式,或者只替换传输方式,并且","再比如,现有的:invoker,","再比如:最开始,远程服务都是基于接口方法,进行透明化调用的。这样,扩展接口就是,","再重新传给","写死了。","减少","出来的,我们不自觉选了一个扩展式扩展,把扩展接口改成了","出错?","出问题时的现场信息,即排查问题要用到的信息。如服务调用失败时,要给出使用","分布式服务框架后续如果维护人员增多或变更,会出现质量的下降,","分支","分离","分离可靠操作和不可靠操作","分类","分解成两个层次,只是","分钟、第三次","分钟。","分钟,把重连分散开。","分钟,第二次","划分逻辑拓普节点,保持统一概念。","则将","创建一个实例,这样框架就控制了","初始化时,将","初始化过程细节","到","前面不停的提到代码被其他人修改,这也开发人员要随时紧记的。这个其他人包括未来的自己,你要总想着这个代码可能会有人去改它。我应该给修改的人一点什么提示,让他知道我现在的设计意图,而不要在程序里面加潜规则,或埋一些容易忽视的雷,比如:你用","功能","功能单元测试","加载","加载扩展点时,会检查扩展点的属性(通过set方法判断),如该属性是扩展点类型,则会注入扩展点对象。因为注入时不能确定使用哪个扩展点(在使用时确定),所以注入的是一个自适应扩展(一个代理)。自适应扩展点调用时,选取一个真正的扩展点,并代理到其上完成调用。dubbo","加载扩展点时,自动注入依赖的扩展点。加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,extensionload","加载,如果在","动态代理扩展","包","包下放一个指定文件加载,比如:eclips","包下,放置名为","包中挑一个一定会加载的类,加上重复类检查,给个示例:","包内","包内同名的这个文件,然后进行合并","包内放置文本文件:meta","包内,dubbo","包内,不是","包名称抓取版本号,这个逻辑是辅助性的,但代码却不少,初步测试也没啥问题,但应该在整个","包括监控在内,所有附加功能,全部通过","包的","包,方便用来调试","区分命令与查询,明确前置条件与后置条件","协议不一定要是","协议不关心业务接口的透明代理,以","协议在接收请求时,应记录请求来源方地址信息:rpccontext.getcontext().setremoteaddress();","协议头约定","协议头识别,就会调用","协议头识别,直接调用","协议扩展","协议扩展点,基于扩展点的","协议扩展,封装远程调用细节。","协议的","协议的实现,如果","协议的实现,如果你选择","协议,整个","单元和集成测试","单元测试统一用","即","即:","即可完成桥接,它们可以用公共基类实现此逻辑。","即可,加上","即存在描述配置,也有环境配置。一部分用","即然要扩展,扩展点的加载方式,首先要统一,微核心+插件式,是比较能达到","即:","原则的思路。","原因参见:谈谈扩充式扩展与增量式扩展。","参数","参数中的提供者","参数中的条件,查询提供者","参数回调","参数验证扩展点。","参数(整个扩展点网的上下文信息)。自适应扩展即是从","参数,url","参数,或者像","参见:http://docs.jboss.org/cdi/tck/reference/1.0.1","参见:谈谈扩充式扩展与增量式扩展","反馈修改。","发布前","发现的问题。","发现自己数据被删除时(写入失败),选择等待这段时间再重试。重试时间可以选择指数级增长,如第一次等","发现自己的数据没有了,重新写入自己的数据的反复操作。这些反复的操作又加重了数据库的负荷,恶化问题。","发现问题、添加测试(集成测试)复现总是;owner","发生在","取消注册服务.","取消注册需处理契约:","取消订阅服务.","取消订阅需处理契约:","变更事件监听器,不允许为空","变量指向本地的","另外扩展配置,可能不尽相同。如果只是策略接口实现类替换,可以考虑","另外,dubbo","另外,尽可能做一个标准约定,如果用户按某种约定做事时,就不需要该配置项。比如:配置模板位置,你可以约定,如果放在","另外,每个方法都尽量前置断言传入参数的合法性,后置断言返回结果的合法性,并文档化。","只会作","只对提供方激活,group可选\"provider\"或\"consumer\"","只暴露服务端口:","只负责组装","只负载加载扩展点,包括","可以使用下面逻辑:","可以通过以下的构建命令来跳过单元测试","可编程配置","可能和业务方的","可能存在未知特定场景异常,或被其他的开发人员误修改逻辑(但一般人员不会去掉","可配置一定可编程,并保持友好的","各层说明","合并结果扩展","合并返回结果,用于分组聚合。","合理的方式是,有一个单独的","同一个或是一类异常日志连续出现几十遍的情况,还是常常能看到的。人眼很容易漏掉淹没在其中不一样的重要日志信息。要尽量避免这种情况。在可以预见会出现的情况,有必要加一些逻辑来避免。","同一个或是一类问题不要重复记录多次","同时配置的","名。","名称空间时,会回调","名;key1","后,在提供者可用的情况下,调用会继续发送到上一次的服务提供者。sticki","后,连接需要关闭,另一方面还需要注意如何避免部分","向","向前兼容很好办,你只要保证配置只增不减,就基本上能保证向前兼容。但向后兼容,也是要注意的,要为后续加入新的配置项做好准备。如果配置出现一个特殊配置,就应该为这个“特殊”情况约定一个兼容规则,因为这个特殊情况,很有可能在以后还会发生。比如:有一个配置文件是保存“服务=地址”映射关系的,其中有一行特殊,保存的是“注册中心=地址”。现在程序加载时,约定“注册中心”这个key是特殊的,做特别处理,其它的都是“服务”。然而,新版本发现,要加一项“监控中心=地址”,这时,旧版本的程序会把“监控中心”做为“服务”处理,因为旧代码是不能改的,兼容性就很会很麻烦。如果先前约定“特殊标识+xxx”为特殊处理,后续就会方便很多。","向后兼容性,可以多向html5学习,参见:html5设计原理","向注册中心暴露服务:","启动,因为服务通常不需要","命令和","命令扩展","命令配置:","和","和一个","和服务器端","和服务消费","和部门以及产品线的需求,势必会将很多不相干的功能凑在一起,客户可以选择性的使用。为了兼容更多的需求,每个产品,每个框架,都在不停的扩展,而我们经常会选择一些扩展的扩展方式,也就是将新旧功能扩展成一个通用实现。我想讨论是,有些情况下也可以考虑增量式的扩展方式,也就是保留原功能的简单性,新功能独立实现。我最近一直做分布式服务框架的开发,就拿我们项目中的问题开涮吧。","哪个","哪些是关键信息呢?","因为使用环境的不确定因素很多,框架总会有一些配置,一般都会到","因为所依赖的","因为线上只有一个注册中心,这样的配置是没有问题的,而测试环境可能有两个注册中心,测试人员不可能去修改配置,改为:","因为这些配置和业务逻辑相关,放在代码里也是合理的。","图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,servic","图中只包含","图中小方块","图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。","图中的","图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。","图中背景方块","图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。","图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。","图例说明:","在","在classpath搜文件","在一个","在会自动注入依赖的扩展点。extensionload","在加载扩展点时,如果加载到的扩展点有拷贝构造函数,则判定为扩展点","在很多场景下都使用","在所有的扩展点上添加了逻辑,有些类似","在扩展点实现调用该方法,并返回结果。","在扩展类的","在有注册中心,通过注册中心发现提供者地址的情况下","在有注册中心,需要注册提供者地址的情况下","在根据","在没有注册中心,直接暴露提供者的情况下","在没有注册中心,直连提供者的情况下","在给应用排错时,最怕的就是那种只有简单的一句错误描述,啥信息都没有的异常信息。比如上次碰到一个","在缺省","在遇到","在重启前,先手工将出错现场所有数据备份一下,所以最好在","在重要的过程上设置拦截接口","均会生效。如果要覆盖,需配置:","坏味道","基于","基于传输层之上,实现","基于复用度分包,总是一起使用的放在同一包下,将接口和基类分成独立模块,大的实现也使用独立模块。","基于扩展点自适应机制,所有的","基于扩展点自适应机制,通过","基于扩展点自适应机制,通过提供者","基本设计原则","基础框架,在此之上实现","基类也是","增加了对扩展点","增量式扩展,而不要扩充原始核心概念","处于可用状态,则进行后续调用","处理。","处理服务暴露的关键就在","处理,会话消息发送,再加一个","多个服务调用是通过同一个","多个测试用例不通过。时间一紧,谁有这个闲功夫去改这么多形态各异的测试用例?久而久之,这个测试代码就已经不能真实反应代码现在的状况,很多时候会被迫绕过。最好的情况是,修改一行代码,有且只有一行测试代码不通过。如果修改了代码而测试用例还能通过,那也不行,表示测试没有覆盖到。另外,可","多个项目在使用,每天都要去帮应用查问题,来来回回,发现大部分都是配置错误,或者重复的文件或类,或者网络不通等,所以准备在新版本中加入防痴呆设计。估且这么叫吧,可能很简单,但对排错速度还是有点帮助,希望能抛砖引玉,也希望大家多给力,想出更多的防范措施共享出来。","够稳定后:","大凡发展的比较好的框架,都遵守微核的理念。eclips","大家经常说,魔鬼在细节中,确实如此。","契约文档化","契约:","如url没有value,则使用缺省扩展点实现。如没有扩展点,","如为一个问题准备一个标志,出问题后打日志后设置标志,避免重复打日志。问题恢复后清除标志。","如果","如果manifest.mf规范中没有版本号,基于jar包名获取版本号","如果一个类可以成为不变类(immut","如果一种类型的数据为空,需通知一个empty协议并带category参数的标识性url数据。","如果不可恢复或需要报警,打印","如果你要写个远程调用框架,那远程调用的过程应该有一个统一的拦截接口。如果你要写一个","如果可恢复异常,或瞬时的状态不一致,打印","如果可能,给出问题的原因和解决方法。这让维护和问题解决变得简单,而不是寻求精通者(往往是实现者)的帮助。","如果大家有兴趣,也可以一起研究,和行知一块讨论。","如果所有的服务提供者都不可用,重新遍历整个列表(优先从没有选过的列表中选择),判断是否有可用的服务提供者(选择过程中,不可用的服务提供者可能会恢复到可用状态),如果有,则进行后续调用","如果扩展点加载失败,连扩展点的名称都拿不到了。比如:jdk","如果是dynamic=false的持久存储数据,找不到注册数据,则抛illegalstateexception,否则忽略。","如果是扩展功能,直接新增工程,黑盒依赖","如果是改","如果有多个,就表示重复","如果没有订阅,直接忽略。","如果确保进入集合的元素是可控的且是足够少,则可以放心使用。这是大部分的情况。如果不能保证,则使用有有界的集合。当到达界限时,选择一个合适的丢弃策略。","如果第一步选择的服务提供者不可用,则从剩余服务提供者列表中继续选择,如果可用,进行后续调用","如果第三步没有选择出可用的服务提供者,会选第一步选出的","如果采用增量式扩展,无状态消息发送原封不动,同步消息发送,在无状态消息基础上加一个","子包下,不同实现用放在以扩展点名字命名的子包下。","字串就报警,又尽量减少了发生。过多的报警会让人疲倦,使人对报警失去警惕性,使","存在同样的配置时,可能误加载,以及在","存在多个服务提供者的情况下,首先根据","完成实现。(保证两方的时间投入","完成,extensionload","定义","定期升级版本用户带来了不安。这是一个假命题,说明如下:","实例(如上图中的红色部分),这是服务消费的关键。接下来把","实例。这样当网络通讯层收到一个请求后,会找到对应的","实例可以提取约定","实例的细节和上一章节所描述的类似。","实例的逻辑是固定,指定提取的","实例,从而真正调用了服务提供者的代码。dubbo","实例,到这一步就完成具体服务到","实例,并新生成一个","实例,并调用它所对应的","实例,直到扩展点方法执行时才决定调用是一个扩展点实现。","实现。","实现。adapt","实现了真正的远程服务调用。","实现会将收到的调用转给目标接口,这样就能将新功能增量到旧功能上,并保持原来结构的简单性。","实现先查找","实现即可。","实现扩展点的通用行为,而不要用基类,比如负载均衡之前的","实现是","实现是在加载扩展点里动态生成。指定提取的","实现来调用对应实现的真正的","实现类内容","实现类的实例报上来,框架只是使用这些实例,这些对象是怎么创建的,怎么销毁的,都和框架无关,框架最多提供工具类辅助管理,而不是绝对控制。","实现类的生命周期,action","实现类的类名或类元信息报上来,然后在内部通过反射","实现细节","实现细节:","实现细节:参数的传递采用","实现细节:对于同一个地址由于使用了共享连接,那","实现,web","实现,每个功能都是调用链上的一环。","实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。","容器。自已造一个小的","容器去加载服务。","容器扩展","容器模块:是一个","容器的特性,没必要用","容器,也觉得有点过度设计,所以打算采用最简单的","容错","容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。","对于","对于容错行为的测试,比如","对于框架的开发人员,对线程安全性和可见性的深入理解是最基本的要求。需要开发人员,在写每一行代码时都应在潜意识中确保其正确性。因为这种代码,在小并发下做功能测试时,会显得很正常。但在高并发下就会出现莫明其妙的问题,而且场景很难重现,极难排查。","对于环境配置,在","对于集合类扩展点,比如:filter,","对产品都很重要。但是添加新功能会影响稳定性,dubbo","对其它层都不会造成影响,因为只有一个提供者时,是不需要","对外的","对外的唯一异常类型,所有内部异常,如果要抛出给用户,必须转为","对多种相似类型的抽象,用基类实现,比如","对应","对应不起来,当用户执行","对应的参数值(实例方法)加入到异步调用的回调列表中。","对等网络节点组网器。","对象。","对象封装了本来要执行过程的上下文,并且","对象是不能直接","对象的","对象转换","对象都转换成","对象(包含了key","将","将多个提供者引用,通过","将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。","就出现过这样的问题,中间层用“地址”做为缓存","就可以完成非透明的","就是一个不变契约。","就是上图中服务消费端的","就要留一些扩展点,让参与者尽量黑盒扩展,而不是白盒的修改代码,否则分支,质量,合并,冲突都会很难管理。","就需要特别注意,一方面要满足对同一个地址","尽可能携带完整的上下文信息,比如出错原因,出错的机器地址,调用对方的地址,连的注册中心地址,使用","尽可能用","尽早失败也应该成为潜意识,在有传入参数和状态变化时,均在入口处全部断言。一个不合法的值和状态,在第一时间就应报错,而不是等到要用时才报错。因为等到要用时,可能前面已经修改其它相关状态,而在程序中很少有人去处理回滚逻辑。这样报错后,其实内部状态可能已经混乱,极易在一个隐蔽分支上引发程序不可恢复。","尽早失败和前置断言","尽量保持子包依赖父包,而不要反向。","尽量减少","尽量将直接原因写在最前面,所有上下文信息,在原因后用键值对显示。","尽量采用","层","层为","层只负责单向消息传输,是对","层和","层封装了所有接口的透明化代理,而在其它层都以","层放在","层是在传输层之上封装了","层都放在","展开总设计图右边服务消费方引用服务的蓝色初始化链,时序图如下:","展开总设计图左边服务提供方暴露服务的蓝色初始化链,时序图如下:","展开总设计图的红色调用链,如下:","属性转成","嵌套,保持","工程。","已注册信息列表,可能为空,含义同{@link","已注册信息列表,总不为空,含义同{@link","已知扩展","已认领","并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*","并约定所有插件,都必须标注:@extension(\"name\"),作为加载后的标识性名称,用于配置选择。","序列化扩展","底层来实现,这就省了不少工作量。","建议应用方在监控中心配置","开发完成","开发的人群。主要涵盖了","开源社区的行知同学已着手研究这一块,他的初步想法是借鉴","开通访问权限\"","异常信息给出解决方案","异常和日志","异常防御,但不忽略异常","异常,就这几个单词,啥都没有,哪个","引用了","引用和","引用服务","引用服务时序","引用监听扩展","引用远程服务:","当","当url中有设置check=false时,连接失败不能抛出异常,需内部自动恢复。","当url设置了category=overrides时,表示分类存储,缺省类别为providers,可按分类部分通知数据。","当url设置了category=overrides,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。","当url设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。","当url设置了check=false时,订阅失败后不报错,在后台定时重试。","当url设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。","当一个注册中心停机时,其它的","当上面执行","当客户端与服务端创建代理时,暂不建立","当收到服务变更通知时触发。","当暴露服务出错时抛出,比如端口已占用","当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。","当有服务引用时,触发该事件。","当有服务暴露时,触发该事件。","当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。","当注册中心重启,网络抖动,需自动恢复订阅请求。","当用户调用","当用户调用refer()所返回的invoker对象的invoke()方法时,协议需相应执行同url远端export()传入的invoker对象的invoke()方法。","当设置check=false时表示不检查连接,否则在连接不上时抛出异常。","当连接服务提供方失败时抛出","当配置了xxx参数,并且参数为有效值时激活,比如配了cache=\"lru\",自动激活cachefilter。","待定","循环等待结果的测试用例,对定时器和网络的测试,用以将定时器中的逻辑抽为方法测试。","微核插件式,平等对待第三方","必填配置估计大家都会检查,因为没有的话,根本没法运行。但对一些可选参数,也应该做一些检查,比如:服务框架允许通过注册中心关联服务消费者和服务提供者,也允许直接配置服务提供者地址点对点直连,这时候,注册中心地址是可选的,但如果没有配点对点直连配置,注册中心地址就一定要配,这时候也要做相应检查。","必须阻塞订阅过程,等第一次通知完后再返回。","忽略异常,返回缺省版本号","性是隔离的基础,把间接依赖的逻辑屏蔽掉。可","性的一个最大的杀手就是静态方法,尽量少用。","性能基准测试","总是以服务接口和数据类型为维度全量通知,即不会通知一个服务的同类型的部分数据,用户不需要对比上一次通知结果。","恢复","成为","成的","我们使用","我们平台的产品越来越多,产品的功能也越来越多。平台的产品为了适应各","我在想,有没有什么是需要大家共同遵守的,根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节。可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记。在每一行代码中都考虑这些因素,是需要很大耐心的,","或","或其它上下文格式,配置信息也转成","或者","或者以上的版本","或者去掉","或者把平时支持应用时遇到的问题及解决办法都写到异常信息里。","或者:","或:","所以,我们需要对核心扩展点写","所在的","所有","所有扩展点参数都包含","所有接口都放在模块的根包下,基类放在","所有服务器均支持","所有细节。","所返回的","才是","打印","打印错误日志,并返回基本版本,因为","执行前加下分页包装,做下数据权限控制,统计下","执行时间;如果有人想在请求执行前检查下角色,包装下输入输出流,统计下请求量,等等,就可以自行完成,而不用侵入框架内部。拦截接口,通常是把过程本身用一个对象封装起来,传给拦截器链,比如:远程调用主过程为","扩展。","扩展功能插件。","扩展契约","扩展实现","扩展接口","扩展接口。框架如果让使用者或扩展者把","扩展接口仅用于系统集成,或","扩展接口职责尽可能单一,具有可组合性","扩展机制,参见:java.util.serviceloader,也就是扩展者在","扩展点之间的组合将关系由","扩展点兼容性测试","扩展点加载","扩展点加载扩展","扩展点发现机制加强而来。","扩展点基类与","扩展点方法调用会有url参数(或是参数有url成员)","扩展点本身的加载容器,可从不同容器加载扩展点。","扩展点特性","扩展点的","扩展点的代码:","扩展点的加载","扩展点自动包装","扩展点自动激活","扩展点自动装配","扩展点自适应","扩展点自适应机制,根据","扩展点进行暴露:","扩展点都会自动套上","扩展点配置","扩展点重构","扩展点,伪装成单个提供者引用返回。","扩展示例","扩展说明","扩展配置","扩展配置,比如:协议扩展,策略扩展等。","扩展配置,通常对配置的聚合要求比较高。因为产品需要发现第三方实现,将其加入产品内部。在","扫描","扫描到所有","扫描所有","技术兼容性测试","抛出异常的地方不用打印日志,由最终处理异常者决定打印日志的级别,吃掉异常必需打印日志。","拆分后,设计如下:","拉成分支","拦截实现。","拦截扩展","拦截服务","拦截点。","持有了实际的扩展点实现类。","按全url匹配取消注册。","按全url匹配取消订阅。","接口","接口中。","接口做不同的实现。","接口做渲染输出。","接口叫","接口方法做一个操作后,再调用extension的方法","接口混在了","接口类名的点分隔小写字串。即对于","接口类如下:","接口给扩展者控制输出方式,比如用","接口转换成业务接口。","接口,方法名通常是过去式的,比如","接口,有","接口,里面有一个通用的","描述配置,比如:服务接口描述,服务版本等。","提供配置时,要同时考虑开发人员,测试人员,配管人员,系统管理员。测试人员是不能修改代码的,而测试的环境很可能较为复杂,需要为测试人员留一些“后门”,可以在外围修改配置项。就像","提高代码的可测性","携带配置信息。","支持","支持backup=10.20.153.10备选注册中心集群地址。","支持file=registry.cache本地磁盘文件缓存。","支持session=60000会话超时或过期设置。","支持timeout=1000请求超时设置。","支持url上的username:password权限认证。","支持在","支持通过","改成:(链式过滤器)","改进了","数据序列化层:可复用的一些工具,扩展接口为","数据库上的活锁","数组,拷贝一次。然而,大部分场景都用不上","数组,然后传给业务方的","数量相对比较多,会对注册中心造成冲击。避免方法可以是","整体上按照分层结构进行分包,与分层的不同点在于:","整体设计","整体都隐含在","整理后,设计如下:","文档","断言日志输出。","新功能可以高版本中快速响应,并让应用能试用新功能。","新功能版本:高版本,比如","新功能的开发","新版本去掉了","新版本提供了与","方式管理插件。","方式,去掉过多的","方法。","方法。如提取","方法使用","方法时,判断如果有配置","方法时,协议需相应执行同","方法来判定其成员。即","方法生成","方法的","方法调用","方法,adapt","方法,和其它正常业务上的接口一样的调用方式,扩展接口也不用变,只是","方法,基于","方法,它主要是打开","方法,它通过","方法,将","方法,得到提供者引用。","方法,打开服务端口。","方法,是给使用者用来写业务逻辑的。然后,web","方法,由拦截器决定什么时候执行,同时,invoc","方法,返回提供者引用。","无条件自动激活","既然要开放,那","日志","日志。","日志中,尽量多的收集关键信息","日志信息包含环境信息","日志失去意义。再辅以人工定期查看","日志实时报警,warn","日志是发现问题、查看问题一个最常用的手段。日志质量往往被忽视,没有日志使用上的明确约定。重视","日志每周汇总发送通知。","日志表示可以自动恢复,打印","日志表示需要报警,打印","日志输出适配扩展点。","日志适配扩展","旧版本所有的超时时间,重试次数,负载均衡策略等都只能在服务消费方配置。但实际使用过程中发现,服务提供方比消费方更清楚,但这些配置项是在消费方执行时才用到的。新版本,就加入了在服务提供方也能配这些参数,通过注册中心传递到消费方,","旧版本通过约定在每个","时","时不能关闭连接。在实现中采用了引用计数的方案,但为了防范,在连接关闭时,重新建立了一个","时而","时,setwheelmak","时,注入的","时,累加所有","时,需要判断是否是回调,如果是回调,会从","是","是会话域,它持有调用过程中的变量,比如方法名,参数等。","是包装的最终的","是可以","是否使用注册中心,注册中心地址。","是否允许重试,重试次数。","是外围概念,所以","是实体域,它是","是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用","是服务域,它是","是核心层,也就是只要有","是根据调用方法参数(上面有调用哪个扩展点的信息)来选取一个真正的扩展点。","是给使用者用的,而","是给扩展者用的。在设计时,尽量把它们隔离开,而不要混在一起。也就是说,使用者是看不到扩展者写的实现的。","是隔离的。需要将流转换成","暴露了多个服务,jvm","暴露和引用的主功能入口,它负责","暴露服务","暴露服务时序","暴露服务的引用,用于取消暴露","暴露监听扩展","暴露远程服务:","更多设计原则参见:框架设计原则","最痴呆的问题,就是有多个版本的相同jar包,会出现新版本的","最终决定采用的是","最近一直担心","最近有点痴呆,因为解决了太多的痴呆问题。服务框架实施面超来超广,已有","最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里。","有了这样的约定,监管系统发现日志文件的中出现","有多个服务提供者的情况下,配置了","服务代理层:服务接口透明代理,生成服务的客户端","服务分组","服务域/实体域/会话域分离","服务域也就是行为域,它是组件的功能集,同时也负责实体域和会话域的生命周期管理,","服务安装包仓库","服务容器扩展,用于自定义加载内容。","服务提供方和服务消费方调用过程拦截,dubbo","服务提供方线程程实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。","服务提供者","服务提供者代码:","服务提供者暴露一个服务的详细过程","服务提供者选择逻辑","服务消息者从注册中心拿到提供者列表后,会保存提供者列表到内存和磁盘文件中。这样注册中心宕后消费者可以正常运转,甚至可以在注册中心宕机过程中重启消费者。消费者启动时,发现注册中心不可用,会读取保存在磁盘文件中提供者列表。重试逻辑保证注册中心恢复后,更新信息。","服务消费者代码:","服务消费者消费一个服务的详细过程","服务版本","服务的执行体","服务的本地代理","服务的消费者","服务的类型","服务路径","服务,通讯细节这一块由","未认领","本地部署代理","本章节的设计原则摘录自梁飞在","本身的","本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。","朱启恒","来决定","来决定使用哪个","来实现","来查看所有版本的标签。","来源:","构建","构建之前需要配置以下的","构建源代码","某个值,或","某个属性值,或查询一条数据库记录。命令是指有副作用的,也就是会修改状态,比如","某条数据库记录。如果你的方法即做了修改状态的操作,又做了查询返回,如果可能,将其拆成写读分离的两个方法,比如:user","查询条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","标准的","标准的服务发现机制,即在","标签解析为","标识,以便保持兼容。","核心的一个扩展,设计如下:","根据@adaptive注解上声明的key的顺序,从url获致value,作为实际扩展点名。","格式使用。","格式,所有","框架使用一个都继承","框架将","框架或组件通常有两类客户,一个是使用者,一个是扩展者。api","框架有一个","框架设计","框架,它有一个","框架,那至少","框架,那请求的执行过程应该要有拦截接口,等等。没有哪个公用的框架可以","检查列表","检查所有可选配置","检查服务依赖各种资源的状态,此状态检查可同时用于","检查重复工具类:","检查重复的jar包","检查重复的配置文件","检查,它是独立于负载均衡之外的,不需要检查的是url参数关闭。","模块与分包","模块中,为","模块中,以便更大程度复用。","模块中,这两层是","模块分包","模块说明:","模型类,","模式,microkernel","模板输出的就继承","模板输出还是用","次结果都是一样的,比如","正常运行时的中间状态提示,打印","此项功能自动关闭连接重试功能,开启发送重试功能(即发送数据时如果连接已断开,尝试重新建立连接)","段判断是不是跨机房。另外一个例子,是","每个扩展点的实现者,往往都只是关心一件事,现在的扩展点,并没有完全分离。比如:failover,","每个版本要有","每个都是先配置一个","每次应用一出错,应用的开发或测试就会把出错信息发过来,询问原因,这时候我都会问一大堆套话,用的哪个版本呀?是生产环境还是开发测试环境?哪个注册中心呀?哪个项目中的?哪台机器呀?哪个服务?","每次线上环境一出问题,大家就慌了,通常最直接的办法回滚重启,以减少故障时间,这样现场就被破坏了,要想事后查问题就麻烦了,有些问题必须在线上的大压力下才会发生,线下测试环境很难重现,不太可能让开发或","比如","比如上面说的","比如,invok","比如,远程调用框架它的协议是可以替换的。如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持是可以细分为底层通讯,序列化,动态代理方式等等。如果将接口拆细,正交分解,会更便于扩展者复用已有逻辑,而只是替换某部分实现策略。当然这个分解的粒度需要把握好。","比如:(基类模板方法)","比如:一个","比如:远程调用框架,肯定少不了序列化功能,功能很简单,就是把流转成对象,对象转成流。但因有些地方可能会使用","没有","没有值则找","没有分离的反面例子,spi","没有完全分开,全由","没有被启动,spring","没有配置cache属性时,使用此配置","没有配置cluster时,使用此配置","没有配置dispatcher属性时,使用此配置","没有配置exchanger属性时,使用此配置","没有配置loadbalance时,使用此配置","没有配置networker属性时,使用此配置","没有配置page属性时,使用此配置","没有配置prototol属性时,使用此配置","没有配置proxy属性时,使用此配置","没有配置registry属性时,使用此配置","没有配置serialization时,使用此配置","没有配置status属性时,使用此配置","没有配置telnet属性时,使用此配置","没有配置threadpool时,使用此配置","没有配置transporter/server/client属性时,使用此配置","没有配置validation属性时,使用此配置","泛化式扩展指:将扩展点逐渐抽象,取所有功能并集,新加功能总是套入并扩充旧功能的概念。","注入其它扩展点。","注入扩展点之间的依赖,不要直接依赖","注入的依赖扩展点是一个","注册中心","注册中心会定时更新数据库一条记录的时间戳,这样集群中其它的注册中心感知它是存活。过期注册中心和它的相关数据","注册中心地址,不允许为空","注册中心层:封装服务地址的注册与发现,以服务","注册中心引用,总不返回空","注册中心扩展","注册中心推送路由规则","注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。","注册中心认为","注册中心路由规则推送:","注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","注册服务.","注册服务地址:","注册需处理契约:","注意:","注意:扩展点使用单一实例加载(请确保扩展实现的线程安全性),缓存在","注意:这里的配置文件是放在你自己的","注解使用如下:","注解在接口方法上提供。","注解在方法上说明。","流程","测试","测试一下网络,如果是跨机房调用,可能是防火墙阻挡,请联系","消息派发扩展","渗透在整个实现代码里,对于刚开始接触","源代码","源码、设计有兴趣的,或者有意愿加入","源码构建","满眼都是","点对点暴露和引用服务","点对点直连服务:","然后","然后将","版本","版本。","版本前有试用阶段","版本是稳定的!因为:","版本有","版本管理","版本(可以跨了多个版本)定期升级平摊风险(类似小步快跑)。经历过周期长的大项目的同学会有这样的经历,三方库版本长时间不升级,结果出了问题不得不升级到新版本(跨了多个版本)风险巨大。","版本,以","版本,只","版本,所以用户需要积极跟进升级到","版本,线上使用的版本,只会","版本:低版本,比如","特有功能,默认关闭。","特有功能,默认开启。","特殊值","特殊符号","状态","状态检查扩展","状态,表示要不要返回","环境配置,比如:连接数,超时等配置。","环境,都先将流转成","现在很多的逻辑,都是放在基类中实现,然后通过模板方法回调子类的实现,包括:local,","现在的设计是完全无侵入,也就是使用者只依赖于配置契约。经过多个版本的发展,为了满足各种需求场景,配置越来越多。为了保持兼容,配置只增不减,里面潜伏着各种风格,约定,规则。新版本也将配置做了一次调整,去掉了","现有","现有功能都当成了核心功能。上面的概念包含了","现有的设计:","生成一个","生成的自适应扩展点类如下:","用","用一个无效值代表关闭,n/a地址,0重试次数等。","用于当出现异常场景时,避免影响业务逻辑的正常调用.","用于避免开启无用的连接.","用例。","用到的原则和方法。","用户自定义","用户要配合的职责","用来确定使用哪个扩展点,这个信息通过的","用法","用请求参数作为","由一个插件生命周期管理容器,构成微核心,核心不包括任何功能,这样可以确保所有功能都能被替换,并且,框架作者能做到的功能,扩展者也一定要能做到,以保证平等对待第三方,所以,框架自身的功能也要用插件的方式实现,不能有任何硬编码。","由于","由于开发只会","由于自适应扩展点的上面的约定,extensionload","由协议实现,协议通常需要在此","由框架实现并传入,协议不需要关心。","界限设置","白文志","的","的。","的一个实现类:","的一部分,每个扩展点都应该有方便使用的基类支持。","的主过程上","的人,确实容易给搞混了。","的代码原封不动,再加一个","的以下问题:","的任务等待队列使用有限队列,避免资源耗尽。当任务等待队列饱和时,选择一个合适的饱和策略。这样保证平滑劣化。","的使用,提高","的信息浓度。日志过多、过于混乱,会导致有用的信息被淹没。","的值中,通过竖号分隔多个注册中心地址,用于表示多注册中心地址。","的协议为例,在协议的实现","的协议头,进行不同协议的服务暴露或引用。","的协议,只需在","的协议,通讯,序列化,注册中心,负载均策等扩展点,都有多种可选策略,以应对不同应用场景,而我们的测试用例很分散,当用户自己需要加一种新的实现时,总是不确定能否满足扩展点的完整契约。","的原因是","的参数。","的参数,却时而","的地方无视即可。","的场景扩展了一下,这样,不管是不是","的实现","的实现。","的实现中要注入哪个。","的实现,要用","的容器,以简单的","的容易程度,和测试的隔离性。至于测试的自动性,可重复性,非偶然性,无序性,完备性(全覆盖),轻量性(可快速执行),一般开发人员,加上","的层,remot","的层,不包含","的工厂方法。","的工程","的微核是","的所有功能点都可被用户自定义扩展所替换。","的所有功能,包括:proxy,","的执行过程,map","的扩展点","的扩展点加载从","的扩展点实现","的扩展点类对应的","的抽象,它也可以扩展","的支持,一个扩展点可以直接","的数据。","的新功能基本稳定后,进入","的方法签名为:","的时候,直接依赖","的服务注册中心","的标签,都统一用","的核心。其它,包括","的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起","的核心领域模型中:","的核心,在不需要集群也就是只有一个提供者时,可以只使用这两层完成","的格式为:","的格式为:","的格式为:dubbo://servic","的框架设计、扩展机制、编码规范、版本管理、构建等话题。","的测试,统一用","的源代码","的源代码和","的版本、服务提供者的","的版本等。","的现有开发人员能实现的需求有限,很多需求都被","的生命周期管理。","的生老病死,框架都自己做了,外部扩展或集成都无能为力。好的办法是让使用者或扩展者把","的目的是将多个","的简洁性。","的给予时间保证)","的缺省值为","的超时时间设置,每个服务,每个方法,都应该可以设置超时时间。但很多服务不关心超时,如果要求每个方法都配置,是不现实的。所以","的转化。接下来就是","的输出转交给","的过程。","的过程,上图中的红色部分。下面我们以","的适用面,不想强依赖","的长连接上,自动在","的项目越来越多,直接使用","的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。","监控中心扩展","监控层:rpc","监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。","目前服务注册中心使用了数据库来保存服务提供者和消费者的信息。注册中心集群不同注册中心也通过数据库来之间同步数据,以感知其它注册中心上提供者。注册中心会内存中保证一份提供者和消费者数据,数据库不可用时,注册中心独立对外正常运转,只是拿不到其它注册中心的数据。当数据库恢复时,重试逻辑会内存中修改的数据写回数据库,并拿到数据库中新数据。","目录下就不用配了,如果你想换个目录,就配置下。","目录下放置与接口同名的文本文件,内容为接口实现类名,多个实现类名用换行符分隔。比如,需要扩展","直扫某个指定名称的配置,或者启动时允许指定配置路径。做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行,否则当使用者需要将你的框架与另一个框架集成时就会带来很多不必要的麻烦。","直接使远程服务调用绕过注册中心,进行点对点测试。还有一种情况,开发人员增加配置时,都会按线上的部署情况做配置,如:","直接暴露服务:","直连引用服务:","相对出问题才升级到","看了都快疯掉,因是线上环境不好调试,而且有些场景不是每次都能重现。异常最基本要带有上下文信息,包括操作者,操作目标,原因等,最好的异常信息,应给出解决方案,比如上面可以给出:\"从","确定要调用哪个扩展点实现。url","示例:","示例:有两个为扩展点","稳定性的提高","端便可反向调用到","端可以对同一个","端暴露一个服务(实现方法参数上声明的接口a),provid","端用于处理请求的","端的接口实例。","第一步,微核心,插件式,平等对待第三方","第三步,全管道式设计,框架自身逻辑,均使用截面拦截实现","第二步,每个扩展点只封装一个变化因子,最大化复用","第五步,分层,组合式扩展,而不是泛化式扩展","第六步,整理,梳理关系","第四步,最少概念,一致性概念模型","等","等。服务域的对象通常会比较重,而且是线程安全的,并以单一实例服务于所有调用。","等。这样有它的优势,就是基于约定,简化了用户对配置加载过程的干预。但同样有它的缺点,当","等于","等它们在调用","等工具的辅助基本都能做到,也能理解它的好处,只是工作量问题。这里要特别强调的是测试用例的单一性(只测目标类本身)和隔离性(不传染失败)。现在的测试代码,过于强调完备性,大量重复交叉测试,看起来没啥坏处,但测试代码越多,维护代价越高。经常出现的问题是,修改一行代码或加一个判断条件,引起","等方式管理插件生命周期。考虑","等第三方协议都已生成了接口代理,只需将将接口代理转成","等等。不要因为外部的请求、数据不受限的而崩溃。","等等。这个核心领域模型及其组成部分称为实体域,它代表着我们要操作的目标本身。实体域通常是线程安全的,不管是通过不变类,同步状态,或复制的方式。","等等,上面甚至可以根据","等等,可以全部拆分使用","等结构。如果有复杂的生命周期管理,可能需要","等配置。有时候扩展会通过注册接口的方式提供。","等,","等,可以同时加载多个实现,此时,可以用自动激活来简化配置,如:","等,这类配置可以考虑","策略","策略默认开启了连接的","类。","类。extensionload","类加载失败,这个失败原因被吃掉了,和","类包装,","类可以把所有扩展点公共逻辑移至","类可以有多个,也可以根据需要新增。","类同样实现了扩展点接口,但是","类和通用模型。","类型的开关,再配置一个值。","类拿到对外提供服务的实际类","类的","类的实例,wrapper","类都命名为","类,但上面两种是最重要的。","类,将所有","类,而且和jvm加载顺序有关,问题带有偶然性,误导性,遇到这种莫名其妙的问题,最头疼,所以,第一条,先把它防住,在每个","类,调用了旧版本的","累啊,最主要的是,有些开发或测试人员根本分不清,没办法,只好提供上门服务,浪费的时间可不是浮云,所以,日志中最好把需要的环境信息一并打进去,最好给日志输出做个包装,统一处理掉,免得忘了。包装logger接口如:","约定","约定:","级别信息,以评估系统的“亚健康”程度。","线程池(exectorservice)的大小和饱和策略","线程池扩展","线程派发模型","组合式扩展指:将扩展点正交分解,取所有功能交集,新加功能总是基于旧功能之上实现。","组网扩展","组装成链,在链的最后一节调用真实的引用。","组装集合,在暴露和引用前后,进行回调。","经过一个试用阶段保持稳定。","给定所有的扩展点上调用都有","缓存扩展","编码约定","编译器扩展","缩小可变域和尽量","网络传输层:抽象","网络传输扩展","网络通讯,比如通过共享文件,ipc","罗立树","而","而对于描述配置,因为要参与业务逻辑,通常会嵌到应用的生命周期管理中。现在使用","而底层,给“地址”加了一个缺省端口号,导致不加端口号的“地址”和加了缺省端口的“地址”并没有使用相同的缓存。","而描述配置,通常信息比较多,甚至有层次关系,用","脚本之前调用","脚本时,会报不支持","自动加载","自动包装扩展点的","自己实现。","自带的","自身的功能也是通过扩展点实现的,也就是","自适应扩展点","获取注册中心:","获取版本号工具类:","获取脚本类型的名称,但如果","获取路由器:","虽然有点麻烦,但是这样做保证日志信息浓度,让监控更有效。","行为的不同阶段,完全可以抽象掉,统一为","表示。因为","表示不可用,size","表示可以恢复的问题,无需人工介入。","表示正常信息或完全不影响运行。","表示需要人工介入问题。","表示黑名单,这就是一个雷,下一个修改者,包括你自己,都不会记得有这样的约定,可能后面为了改某个其它","要有效利用这个工具要注意:","要求","要注入依赖扩展点时,如何决定要注入依赖扩展点的哪个实现。在这个示例中,即是在多个wheelmak","规范。","解析出的","解析服务","解析配置生成配置类","计划完成时间","订阅时的第一次通知,必须是一个服务的所有类型数据的全量通知。","订阅服务.","订阅服务地址:","订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","订阅需处理契约:","认领者","让直接升级。(这个称为“夕阳条款”)","讲一遍逻辑","讲述一遍实现。","设置上限。executorservic","设计原则","设计实现的健壮性","设计或实现不优雅的地方。","访问,用于人工干预。","试用阶段。找足够多的应用试用","语义。","调用。","调用其对应的","调用参数","调用拦截扩展","调用次数和调用时间监控,以","调用的通讯基础。","调用超时","调用链","调用,以","调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。","调用,然后在","调研","谈谈扩充式扩展与增量式扩展","负责服务的注册与发现。","负责服务调用次和调用时间的监控。","负载均衡扩展","贡献","资源是有限的,cpu、内存、io","资源调度器","路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以","路由扩展","转为","转成","转成接口,或将接口实现转成","转换","转换为业务接口。","转换为客户端需要的接口(如:helloworld)。","转换到","输出的就继承","输出等。如果这个","达到饱和时,说明已经达到服务提供方的负荷上限,要在饱和策略的操作中日志记录这个问题,以发出监控警报。记得注意不要重复多次记录哦。(注意,缺省的饱和策略不会有这些附加的操作。)根据警报的频率,已经决定扩容调整等等,避免系统问题被忽略。","过一遍","过期,删除","过程要有拦截接口;如果你要写一个","过程;同理,sql","返回扩展点时,包装在真正的扩展点实现外。即从","返回版本号,如果为空返回缺省版本号","返回的","返回的方法是命令。查询方法通常是幂等性的,无副作用的,也就是不改变任何状态,调","这两种典型协议的实现来进行说明:","这个是契约式设计的一部分,尽量遵守有返回值的方法是查询方法,void","这个问题在下面一点","这些","这是我最不喜欢看到的异常,尤其在核心框架中,我更愿看到信息详细的参数不合法异常。这也是一个健状的程序开发人员,在写每一行代码都应在潜意识中防止的异常。基本上要能确保一次写完的代码,在不测试的情况,都不会出现这两个异常才算合格。","这样依赖的扩展点也可以从url拿到配置信息,所有的扩展点自己定好配置的key后,配置信息从url上从最外层传入。url在配置传递上即是一条总线。","这样操作减少后,保证数据库可以冷却(cool","这篇文档的目标读者是对","这里先要讲一个事件和上面拦截器的区别,拦截器是干预过程的,它是过程的一部分,是基于过程行为的,而事件是基于状态数据的,任何行为改变的相同状态,对事件应该是一致的。事件通常是事后通知,是一个","这里列出一些","这里带来另一个问题,extensionload","这里的可测性主要指","这里的可靠是狭义的指是否会抛出异常或引起状态不一致,比如,写入一个线程安全的","这里记录的是","这里讲的异常防御,指的是对非必须途径上的代码进行最大限度的容忍,包括程序上的","这里面虽然有部分扩展接口,但并不能很好的协作,而且扩展点的加载和配置都没有统一处理,所以下面对它进行重构。","进度","进程间通讯等。","进行序列化。为了适应","进行扩展。","进行解析,基于一对一属性映射,将","进行选择,如果选择的","进行配对,采用扩展式扩展,自然想到,无状态消息其实是一个没有","远程服务的url地址","远程调用层:封将","远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。","远程调用细节","远程通讯模块:相当于","远程通讯的服务器及客户端传输实现。","远程通讯细节","远端","连接注册中心.","连接注册中心需处理契约:","选的是第二种。相似的还有,超时时间,重试时间,定时器间隔时间。如果一个单位是秒,另一个单位是毫秒(c3p0的配置项就是这样),配置人员会疯掉。","选项,","通常微核心都会采用","通常环境配置,用","通知服务地址:","通知者(即注册中心实现)需保证通知的顺序,比如:单线程推送,队列串行化,带版本对比。","通知需处理契约:","通过","通过以下命令以构建","通过以下的这个命令签出最新的项目源码","通过扫描扩展点实现类的所有","通过注册中心引用服务","通过注册中心暴露服务","通道信息派发器,用于指定线程池模型。","逻辑分离。","遵循以下的规范:","都不会用上,remot","都不核心,而是","都没有","配置。将想到的一些记在这,备忘。","配置一对一的配置类,如:serviceconfig","配置一致性","配置也存在“重复代码”,也存在“泛化与精化”的问题。比如:dubbo","配置会比较方便,因为树结构的配置表现力更强。如果非常复杂,也可以考自定义","配置会比较方便,因为都是一些离散的简单值,用","配置分类","配置加载","配置加载。用户感觉非常不便,所以在新版本中进行了合并,统一放到","配置加载,一部分从","配置加载,也增加了配置的灵活性。","配置可以减少配置的学习成本。","配置向后兼容","配置和","配置对象属性首字母小写,多个单词用驼峰命名","配置层:对外配置接口,以","配置属性全部用小写,多个单词用\"","配置总会隐含一些风格或潜规则,应尽可能保持其一致性。比如:很多功能都有开关,然后有一个配置值:","配置文件加载错,也是经常碰到的问题。用户通常会和你说:“我配置的很正确啊,不信我发给你看下,但就是报错”。然后查一圈下来,原来他发过来的配置根本没加载,平台很多产品都会在","配置格式","配置模块中的配置","配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。比如:","配置模块:是","配置的可编程性是非常必要的,不管你以何种方式加载配置文件,都应该提供一个编程的配置方式,允许用户不使用配置文件,直接用代码完成配置过程。因为一个产品,尤其是组件类产品,通常需要和其它产品协作使用,当用户集成你的产品时,可能需要适配配置方式。","配置的比较普遍,而且","配置的缺省值,通常是设置一个常规环境的合理值,这样可以减少用户的配置量。通常建议以线上环境为参考值,开发环境可以通过修改配置适应。缺省值的设置,最好在最外层的配置加载就做处理。程序底层如果发现配置不正确,就应该直接报错,容错在最外层做。如果在程序底层使用时,发现配置值不合理,就填一个缺省值,很容易掩盖表面问题,而引发更深层次的问题。并且配置的中间传递层,很可能并不知道底层使用了一个缺省值,一些中间的检测条件就可能失效。dubbo","配置继承","配置缺省值","配置覆盖","配置设计","配置进行扩展与集成,新版本改成用","配置,spring","配置,支持","配置,比如:log4j.properties,velocity.properties等。产品在初始化时,自动从","采用","采用了方法超时继承服务超时,服务超时再继承缺省超时,没配置时,一层层向上查找。","采用标准格式:protocol://username:password@host:port/path?key=value&key=valu","释放资源。","里加一个","里有一个","里还有一些其他的","重要的状态的变更发送事件并留出监听接口","重试","重试延迟策略","重连时随机延时","重连注册中心","长连接进行数据传输,已达到减少服务端连接数的目的.","长连接,当有数据请求时在做连接初始化。","闾刚","防御性容错","防止空指针和下标越界","防痴呆设计","降低修改时的误解性,不埋雷","随着服务化的推广,网站对dubbo服务框架的需求逐渐增多,dubbo","隔离时,可能找不到配置,并且,当用户希望将配置放到统一的目录时,不太方便。","集合容量","集群扩展","集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡,","需求,把原来非","需要伙伴检查","页面。","页面扩展","项目结构:","领域模型","领域模型中非常重要的一个概念,很多设计思路都是向它靠拢。这就使得","首先","首先查找manifest.mf规范中的版本号","首先,配置的用途是有多种的,大致可以分为:","首先,需要在","驱动等,都是采用这种方式。参见:serviceprovid","验证令牌","验证扩展","高","高可用组件要容忍其依赖组件的失败。","魔鬼在细节","默认在内置",",",",则",",并且属性也一对一,这样有利于文件配置与编程配置的一致性理解,减少学习成本。",",所以这个地方,dubbo",",表示剔除。比如:filter=\""],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"这篇文档的目标读者是对 dubbo 源码、设计有兴趣的,或者有意愿加入 dubbo 开发的人群。主要涵盖了 dubbo 的框架设计、扩展机制、编码规范、版本管理、构建等话题。\n"},"build.html":{"url":"build.html","title":"1 源码构建","keywords":"","body":"源码构建\n代码签出\n通过以下的这个命令签出最新的项目源码 1:\ngit clone https://github.com/alibaba/dubbo dubbo\n\n分支\n我们使用 master 作为主干版本的开发,使用分支作为维护版本。可以通过 https://github.com/alibaba/dubbo/tags 来查看所有版本的标签。\n构建\nDubbo 使用 maven 作为构建工具。\n要求\n\nJava 1.5 以上的版本\nMaven 2.2.1 或者以上的版本   \n\n构建之前需要配置以下的 MAVEN_OPTS\nexport MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=512m\n\n使用以下命令做一次构建\nmvn clean install\n\n可以通过以下的构建命令来跳过单元测试\nmvn install -Dmaven.test.skip\n\n构建源代码 jar 包\n通过以下命令以构建 Dubbo 的源代码 jar 包,方便用来调试 Dubbo 源代码\nmvn clean source:jar install -Dmaven.test.skip\n\nIDE 支持\n使用以下命令来生成 IDE 的工程\nIntellij Idea\nmvn idea:idea\n\neclipse\nmvn eclipse:eclipse\n\n在 eclipse 中导入\n首先,需要在 eclipse 中配置 maven 仓库。通过 Preferences -> Java -> Build Path -> Classpath 定义 M2_REPO 的 classpath 变量指向本地的 maven 仓库。 2\n也可以通过以下的 maven 命令配置:\nmvn eclipse:configure-workspace -Declipse.workspace=/path/to/the/workspace/\n\n\n1. 也可以直接在 https://github.com/alibaba/dubbo 上浏览源代码 ↩\n\n\n2. UNIX 下的路径是 ${HOME}/.m2/repository, Windows 下的路径是 C:\\Documents and Settings\\.m2\\repository ↩\n\n"},"design.html":{"url":"design.html","title":"2 框架设计","keywords":"","body":"框架设计\n整体设计\n\n图例说明:\n\n图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。\n图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。\n图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。\n图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。\n\n各层说明\n\nconfig 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类\nproxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory\nregistry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService\ncluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance\nmonitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService\nprotocol 远程调用层:封将 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter\nexchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer\ntransport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec\nserialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool\n\n关系说明\n\n在 RPC 中,Protocol 是核心层,也就是只要有 Protocol + Invoker + Exporter 就可以完成非透明的 RPC 调用,然后在 Invoker 的主过程上 Filter 拦截点。\n图中的 Consumer 和 Provider 是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用 Client 和 Server 的原因是 Dubbo 在很多场景下都使用 Provider, Consumer, Registry, Monitor 划分逻辑拓普节点,保持统一概念。\n而 Cluster 是外围概念,所以 Cluster 的目的是将多个 Invoker 伪装成一个 Invoker,这样其它人只要关注 Protocol 层 Invoker 即可,加上 Cluster 或者去掉 Cluster 对其它层都不会造成影响,因为只有一个提供者时,是不需要 Cluster 的。\nProxy 层封装了所有接口的透明化代理,而在其它层都以 Invoker 为中心,只有到了暴露给用户使用时,才用 Proxy 将 Invoker 转成接口,或将接口实现转成 Invoker,也就是去掉 Proxy 层 RPC 是可以 Run 的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。\n而 Remoting 实现是 Dubbo 协议的实现,如果你选择 RMI 协议,整个 Remoting 都不会用上,Remoting 内部再划为 Transport 传输层和 Exchange 信息交换层,Transport 层只负责单向消息传输,是对 Mina, Netty, Grizzly 的抽象,它也可以扩展 UDP 传输,而 Exchange 层是在传输层之上封装了 Request-Response 语义。\nRegistry 和 Monitor 实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。\n\n模块分包\n\n模块说明:\n\ndubbo-common 公共逻辑模块:包括 Util 类和通用模型。\ndubbo-remoting 远程通讯模块:相当于 Dubbo 协议的实现,如果 RPC 用 RMI协议则不需要使用此包。\ndubbo-rpc 远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。\ndubbo-cluster 集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡, 容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。\ndubbo-registry 注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。\ndubbo-monitor 监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。\ndubbo-config 配置模块:是 Dubbo 对外的 API,用户通过 Config 使用D ubbo,隐藏 Dubbo 所有细节。\ndubbo-container 容器模块:是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。\n\n整体上按照分层结构进行分包,与分层的不同点在于:\n\ncontainer 为服务容器,用于部署运行服务,没有在层中画出。\nprotocol 层和 proxy 层都放在 rpc 模块中,这两层是 rpc 的核心,在不需要集群也就是只有一个提供者时,可以只使用这两层完成 rpc 调用。\ntransport 层和 exchange 层都放在 remoting 模块中,为 rpc 调用的通讯基础。\nserialize 层放在 common 模块中,以便更大程度复用。\n\n依赖关系\n\n图例说明:\n\n图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互。\n图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点。\n图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。\n图中只包含 RPC 的层,不包含 Remoting 的层,Remoting 整体都隐含在 Protocol 中。\n\n调用链\n展开总设计图的红色调用链,如下:\n\n暴露服务时序\n展开总设计图左边服务提供方暴露服务的蓝色初始化链,时序图如下:\n\n引用服务时序\n展开总设计图右边服务消费方引用服务的蓝色初始化链,时序图如下:\n\n领域模型\n在 Dubbo 的核心领域模型中:\n\nProtocol 是服务域,它是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。\nInvoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。\nInvocation 是会话域,它持有调用过程中的变量,比如方法名,参数等。\n\n基本设计原则\n\n采用 Microkernel + Plugin 模式,Microkernel 只负责组装 Plugin,Dubbo 自身的功能也是通过扩展点实现的,也就是 Dubbo 的所有功能点都可被用户自定义扩展所替换。\n采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息。\n\n更多设计原则参见:框架设计原则\n"},"SPI.html":{"url":"SPI.html","title":"3 扩展点加载","keywords":"","body":"扩展点加载\n扩展点配置\n来源:\nDubbo 的扩展点加载从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现机制加强而来。\nDubbo 改进了 JDK 标准的 SPI 的以下问题:\n\nJDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。\n如果扩展点加载失败,连扩展点的名称都拿不到了。比如:JDK 标准的 ScriptEngine,通过 getName() 获取脚本类型的名称,但如果 RubyScriptEngine 因为所依赖的 jruby.jar 不存在,导致 RubyScriptEngine 类加载失败,这个失败原因被吃掉了,和 ruby 对应不起来,当用户执行 ruby  脚本时,会报不支持 ruby,而不是真正失败的原因。\n增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。\n\n约定:\n在扩展类的 jar 包内 1,放置扩展点配置文件 META-INF/dubbo/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔。\n示例:\n以扩展 Dubbo 的协议为例,在协议的实现 jar 包内放置文本文件:META-INF/dubbo/com.alibaba.dubbo.rpc.Protocol,内容为:\nxxx=com.alibaba.xxx.XxxProtocol\n\n实现类内容 2:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implemenets Protocol { \n    // ...\n}\n\n配置模块中的配置\nDubbo 配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。比如:\n\n\n扩展点特性\n扩展点自动包装\n自动包装扩展点的 Wrapper 类。ExtensionLoader 在加载扩展点时,如果加载到的扩展点有拷贝构造函数,则判定为扩展点 Wrapper 类。\nWrapper类内容:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocolWrapper implemenets Protocol {\n    Protocol impl;\n\n    public XxxProtocol(Protocol protocol) { impl = protocol; }\n\n    // 接口方法做一个操作后,再调用extension的方法\n    public void refer() {\n        //... 一些操作\n        impl.refer();\n        // ... 一些操作\n    }\n\n    // ...\n}\n\nWrapper 类同样实现了扩展点接口,但是 Wrapper 不是扩展点的真正实现。它的用途主要是用于从 ExtensionLoader 返回扩展点时,包装在真正的扩展点实现外。即从 ExtensionLoader 中返回的实际上是 Wrapper 类的实例,Wrapper 持有了实际的扩展点实现类。\n扩展点的 Wrapper 类可以有多个,也可以根据需要新增。\n通过 Wrapper 类可以把所有扩展点公共逻辑移至 Wrapper 中。新加的 Wrapper 在所有的扩展点上添加了逻辑,有些类似 AOP,即 Wrapper 代理了扩展点。\n扩展点自动装配\n加载扩展点时,自动注入依赖的扩展点。加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,ExtensionLoader 在会自动注入依赖的扩展点。ExtensionLoader 通过扫描扩展点实现类的所有 setter 方法来判定其成员。即 ExtensionLoader 会执行扩展点的拼装操作。\n示例:有两个为扩展点 CarMaker(造车者)、WheelMaker (造轮者)\n接口类如下:\npublic interface CarMaker {\n    Car makeCar();\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel();\n}\n\nCarMaker 的一个实现类:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar() {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel();\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\nExtensionLoader 加载 CarMaker 的扩展点实现 RaceCar 时,setWheelMaker 方法的 WheelMaker 也是扩展点则会注入 WheelMaker 的实现。\n这里带来另一个问题,ExtensionLoader 要注入依赖扩展点时,如何决定要注入依赖扩展点的哪个实现。在这个示例中,即是在多个WheelMaker 的实现中要注入哪个。\n这个问题在下面一点 扩展点自适应 中说明。\n扩展点自适应\nExtensionLoader 注入的依赖扩展点是一个 Adaptive 实例,直到扩展点方法执行时才决定调用是一个扩展点实现。\nDubbo 使用 URL 对象(包含了Key-Value)传递配置信息。\n扩展点方法调用会有URL参数(或是参数有URL成员)\n这样依赖的扩展点也可以从URL拿到配置信息,所有的扩展点自己定好配置的Key后,配置信息从URL上从最外层传入。URL在配置传递上即是一条总线。\n示例:有两个为扩展点 CarMaker、WheelMaker\n接口类如下:\npublic interface CarMaker {\n    Car makeCar(URL url);\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel(URL url);\n}\n\nCarMaker 的一个实现类:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar(URL url) {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel(url);\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\n当上面执行\n// ...\nWheel wheel = wheelMaker.makeWheel(url);\n// ...\n\n时,注入的 Adaptive 实例可以提取约定 Key 来决定使用哪个 WheelMaker 实现来调用对应实现的真正的 makeWheel 方法。如提取 wheel.type, key 即 url.get(\"wheel.type\") 来决定 WheelMake 实现。Adaptive 实例的逻辑是固定,指定提取的 URL 的 Key,即可以代理真正的实现类上,可以动态生成。\n在 Dubbo 的 ExtensionLoader 的扩展点类对应的 Adaptive 实现是在加载扩展点里动态生成。指定提取的 URL 的 Key 通过 @Adaptive 注解在接口方法上提供。\n下面是 Dubbo 的 Transporter 扩展点的代码:\npublic interface Transporter {\n    @Adaptive({\"server\", \"transport\"})\n    Server bind(URL url, ChannelHandler handler) throws RemotingException;\n\n    @Adaptive({\"client\", \"transport\"})\n    Client connect(URL url, ChannelHandler handler) throws RemotingException;\n}\n\n对于 bind() 方法,Adaptive 实现先查找 server key,如果该 Key 没有值则找 transport key 值,来决定代理到哪个实际扩展点。\n扩展点自动激活\n对于集合类扩展点,比如:Filter, InvokerListener, ExportListener, TelnetHandler, StatusChecker 等,可以同时加载多个实现,此时,可以用自动激活来简化配置,如:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate // 无条件自动激活\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n或:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(\"xxx\") // 当配置了xxx参数,并且参数为有效值时激活,比如配了cache=\"lru\",自动激活CacheFilter。\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n或:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(group = \"provider\", value = \"xxx\") // 只对提供方激活,group可选\"provider\"或\"consumer\"\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n\n1. 注意:这里的配置文件是放在你自己的 jar 包内,不是 dubbo 本身的 jar 包内,Dubbo 会全 ClassPath 扫描所有 jar 包内同名的这个文件,然后进行合并 ↩\n\n\n2. 注意:扩展点使用单一实例加载(请确保扩展实现的线程安全性),缓存在 ExtensionLoader 中 ↩\n\n"},"implementation.html":{"url":"implementation.html","title":"4 实现细节","keywords":"","body":"实现细节\n初始化过程细节\n解析服务\n基于 dubbo.jar 内的 META-INF/spring.handlers 配置,Spring 在遇到 dubbo 名称空间时,会回调 DubboNamespaceHandler。\n所有 dubbo 的标签,都统一用 DubboBeanDefinitionParser 进行解析,基于一对一属性映射,将 XML 标签解析为 Bean 对象。\n在 ServiceConfig.export() 或 ReferenceConfig.get() 初始化时,将 Bean 对象转换 URL 格式,所有 Bean 属性转成 URL 的参数。\n然后将 URL 传给 协议扩展点,基于扩展点的 扩展点自适应机制,根据 URL 的协议头,进行不同协议的服务暴露或引用。\n暴露服务\n1. 只暴露服务端口:\n在没有注册中心,直接暴露提供者的情况下 1,ServiceConfig 解析出的 URL 的格式为:\ndubbo://service-host/com.foo.FooService?version=1.0.0。\n基于扩展点自适应机制,通过 URL 的 dubbo:// 协议头识别,直接调用 DubboProtocol的 export() 方法,打开服务端口。\n2. 向注册中心暴露服务:\n在有注册中心,需要注册提供者地址的情况下 2,ServiceConfig 解析出的 URL 的格式为: registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(\"dubbo://service-host/com.foo.FooService?version=1.0.0\"),\n基于扩展点自适应机制,通过 URL 的 registry:// 协议头识别,就会调用  RegistryProtocol 的 export() 方法,将 export 参数中的提供者 URL,先注册到注册中心。\n再重新传给 Protocol 扩展点进行暴露: dubbo://service-host/com.foo.FooService?version=1.0.0,然后基于扩展点自适应机制,通过提供者 URL 的 dubbo:// 协议头识别,就会调用 DubboProtocol 的 export() 方法,打开服务端口。\n引用服务\n1. 直连引用服务:\n在没有注册中心,直连提供者的情况下 3,ReferenceConfig 解析出的 URL 的格式为:dubbo://service-host/com.foo.FooService?version=1.0.0。\n基于扩展点自适应机制,通过 URL 的 dubbo:// 协议头识别,直接调用 DubboProtocol 的 refer() 方法,返回提供者引用。\n2. 从注册中心发现引用服务:\n在有注册中心,通过注册中心发现提供者地址的情况下 4,ReferenceConfig 解析出的 URL 的格式为:\nregistry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode(\"consumer://consumer-host/com.foo.FooService?version=1.0.0\")。\n基于扩展点自适应机制,通过 URL 的 registry:// 协议头识别,就会调用 RegistryProtocol 的 refer() 方法,基于 refer 参数中的条件,查询提供者 URL,如:\ndubbo://service-host/com.foo.FooService?version=1.0.0。\n基于扩展点自适应机制,通过提供者 URL 的 dubbo:// 协议头识别,就会调用 DubboProtocol 的 refer() 方法,得到提供者引用。\n然后 RegistryProtocol 将多个提供者引用,通过 Cluster 扩展点,伪装成单个提供者引用返回。\n拦截服务\n基于扩展点自适应机制,所有的 Protocol 扩展点都会自动套上 Wrapper 类。\n基于 ProtocolFilterWrapper 类,将所有 Filter 组装成链,在链的最后一节调用真实的引用。\n基于 ProtocolListenerWrapper 类,将所有 InvokerListener 和 ExporterListener 组装集合,在暴露和引用前后,进行回调。\n包括监控在内,所有附加功能,全部通过 Filter 拦截实现。\n远程调用细节\n服务提供者暴露一个服务的详细过程\n\n上图是服务提供者暴露服务的主过程:\n首先 ServiceConfig 类拿到对外提供服务的实际类 ref(如:HelloWorldImpl),然后通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个 AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化。接下来就是 Invoker 转换到 Exporter 的过程。\nDubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程,上图中的红色部分。下面我们以 Dubbo 和 RMI 这两种典型协议的实现来进行说明:\nDubbo 的实现\nDubbo 协议的 Invoker 转为 Exporter 发生在 DubboProtocol 类的 export 方法,它主要是打开 socket 侦听服务,并接收客户端发来的各种请求,通讯细节由 Dubbo 自己实现。\nRMI 的实现\nRMI 协议的 Invoker 转为 Exporter 发生在 RmiProtocol类的 export 方法,它通过 Spring 或 Dubbo 或 JDK 来实现 RMI 服务,通讯细节这一块由 JDK 底层来实现,这就省了不少工作量。\n服务消费者消费一个服务的详细过程\n\n上图是服务消费的主过程:\n首先 ReferenceConfig 类的 init 方法调用 Protocol 的 refer 方法生成 Invoker 实例(如上图中的红色部分),这是服务消费的关键。接下来把 Invoker 转换为客户端需要的接口(如:HelloWorld)。\n关于每种协议如 RMI/Dubbo/Web service 等它们在调用 refer 方法生成 Invoker 实例的细节和上一章节所描述的类似。\n满眼都是 Invoker\n由于 Invoker 是 Dubbo 领域模型中非常重要的一个概念,很多设计思路都是向它靠拢。这就使得 Invoker 渗透在整个实现代码里,对于刚开始接触 Dubbo 的人,确实容易给搞混了。\n下面我们用一个精简的图来说明最重要的两种 Invoker:服务提供 Invoker 和服务消费 Invoker:\n\n为了更好的解释上面这张图,我们结合服务消费和提供者的代码示例来进行说明:\n服务消费者代码:\npublic class DemoClientAction {\n\n    private DemoService demoService;\n\n    public void setDemoService(DemoService demoService) {\n        this.demoService = demoService;\n    }\n\n    public void start() {\n        String hello = demoService.sayHello(\"world\" + i);\n    }\n}\n\n上面代码中的 DemoService 就是上图中服务消费端的 proxy,用户代码通过这个 proxy 调用其对应的 Invoker 5,而该 Invoker 实现了真正的远程服务调用。\n服务提供者代码:\npublic class DemoServiceImpl implements DemoService {\n\n    public String sayHello(String name) throws RemoteException {\n        return \"Hello \" + name;\n    }\n}\n\n上面这个类会被封装成为一个 AbstractProxyInvoker 实例,并新生成一个 Exporter 实例。这样当网络通讯层收到一个请求后,会找到对应的 Exporter 实例,并调用它所对应的 AbstractProxyInvoker 实例,从而真正调用了服务提供者的代码。Dubbo 里还有一些其他的 Invoker 类,但上面两种是最重要的。\n远程通讯细节\n协议头约定\n\n线程派发模型\n\n\nDispather: all, direct, message, execution, connection\nThreadPool: fixed, cached\n\n\n1. 即: 或者  ↩\n\n\n2. 即:  ↩\n\n\n3. 即: ↩\n\n\n4. 即: ↩\n\n\n5. DubboInvoker、 HessianRpcInvoker、 InjvmInvoker、 RmiInvoker、 WebServiceInvoker 中的任何一个 ↩\n\n"},"impls/introduction.html":{"url":"impls/introduction.html","title":"5 SPI 扩展实现","keywords":"","body":"SPI 扩展实现\nSPI 扩展接口仅用于系统集成,或 Contributor 扩展功能插件。\n"},"impls/protocol.html":{"url":"impls/protocol.html","title":"5.1 协议扩展","keywords":"","body":"协议扩展\n扩展说明\nRPC 协议扩展,封装远程调用细节。\n契约:\n\n当用户调用 refer() 所返回的 Invoker 对象的 invoke() 方法时,协议需相应执行同 URL 远端 export() 传入的 Invoker 对象的 invoke() 方法。\n其中,refer() 返回的 Invoker 由协议实现,协议通常需要在此 Invoker 中发送远程请求,export() 传入的 Invoker 由框架实现并传入,协议不需要关心。\n\n注意:\n\n协议不关心业务接口的透明代理,以 Invoker 为中心,由外层将 Invoker 转换为业务接口。\n协议不一定要是 TCP 网络通讯,比如通过共享文件,IPC 进程间通讯等。\n\n扩展接口\n\ncom.alibaba.dubbo.rpc.Protocol\ncom.alibaba.dubbo.rpc.Exporter\ncom.alibaba.dubbo.rpc.Invoker\n\npublic interface Protocol {\n    /**\n     * 暴露远程服务:\n     * 1. 协议在接收请求时,应记录请求来源方地址信息:RpcContext.getContext().setRemoteAddress();\n     * 2. export()必须是幂等的,也就是暴露同一个URL的Invoker两次,和暴露一次没有区别。\n     * 3. export()传入的Invoker由框架实现并传入,协议不需要关心。\n     * \n     * @param  服务的类型\n     * @param invoker 服务的执行体\n     * @return exporter 暴露服务的引用,用于取消暴露\n     * @throws RpcException 当暴露服务出错时抛出,比如端口已占用\n     */\n     Exporter export(Invoker invoker) throws RpcException;\n\n    /**\n     * 引用远程服务:\n     * 1. 当用户调用refer()所返回的Invoker对象的invoke()方法时,协议需相应执行同URL远端export()传入的Invoker对象的invoke()方法。\n     * 2. refer()返回的Invoker由协议实现,协议通常需要在此Invoker中发送远程请求。\n     * 3. 当url中有设置check=false时,连接失败不能抛出异常,需内部自动恢复。\n     * \n     * @param  服务的类型\n     * @param type 服务的类型\n     * @param url 远程服务的URL地址\n     * @return invoker 服务的本地代理\n     * @throws RpcException 当连接服务提供方失败时抛出\n     */\n     Invoker refer(Class type, URL url) throws RpcException;\n\n}\n\n扩展配置\n\n\n\n\n没有配置prototol属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.injvm.InjvmProtocol\ncom.alibaba.dubbo.rpc.dubbo.DubboProtocol\ncom.alibaba.dubbo.rpc.rmi.RmiProtocol\ncom.alibaba.dubbo.rpc.http.HttpProtocol\ncom.alibaba.dubbo.rpc.http.hessian.HessianProtocol\n\n扩展示例\nMaven项目结构:\n\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProtocol.java (实现Protocol接口)\n                |-XxxExporter.java (实现Exporter接口)\n                |-XxxInvoker.java (实现Invoker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Protocol (纯文本文件,内容为:xxx=com.xxx.XxxProtocol)\nXxxProtocol.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implements Protocol {\n    public  Exporter export(Invoker invoker) throws RpcException {\n        return new XxxExporter(invoker);\n    }\n    public  Invoker refer(Class type, URL url) throws RpcException {\n        return new XxxInvoker(type, url);\n    }\n}\n\nXxxExporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractExporter;\n\npublic class XxxExporter extends AbstractExporter {\n    public XxxExporter(Invoker invoker) throws RemotingException{\n        super(invoker);\n        // ...\n    }\n    public void unexport() {\n        super.unexport();\n        // ...\n    }\n}\n\nXxxInvoker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractInvoker;\n\npublic class XxxInvoker extends AbstractInvoker {\n    public XxxInvoker(Class type, URL url) throws RemotingException{\n        super(type, url);\n    }\n    protected abstract Object doInvoke(Invocation invocation) throws Throwable {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Protocol:\nxxx=com.xxx.XxxProtocol\n\n"},"impls/filter.html":{"url":"impls/filter.html","title":"5.2 调用拦截扩展","keywords":"","body":"调用拦截扩展\n扩展说明\n服务提供方和服务消费方调用过程拦截,Dubbo 本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。\n约定:\n\n用户自定义 filter 默认在内置 filter 之后。\n特殊值 default,表示缺省扩展点插入的位置。比如:filter=\"xxx,default,yyy\",表示 xxx 在缺省 filter 之前,yyy 在缺省 filter 之后。\n特殊符号 -,表示剔除。比如:filter=\"-foo1\",剔除添加缺省扩展点 foo1。比如:filter=\"-default\",剔除添加所有缺省扩展点。\nprovider 和 service 同时配置的 filter 时,累加所有 filter,而不是覆盖。比如: 和 ,则 xxx,yyy,aaa,bbb 均会生效。如果要覆盖,需配置:\n\n扩展接口\ncom.alibaba.dubbo.rpc.Filter\n扩展配置\n\n\n\n\n\n\n\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.filter.EchoFilter\ncom.alibaba.dubbo.rpc.filter.GenericFilter\ncom.alibaba.dubbo.rpc.filter.GenericImplFilter\ncom.alibaba.dubbo.rpc.filter.TokenFilter\ncom.alibaba.dubbo.rpc.filter.AccessLogFilter\ncom.alibaba.dubbo.rpc.filter.CountFilter\ncom.alibaba.dubbo.rpc.filter.ActiveLimitFilter\ncom.alibaba.dubbo.rpc.filter.ClassLoaderFilter\ncom.alibaba.dubbo.rpc.filter.ContextFilter\ncom.alibaba.dubbo.rpc.filter.ConsumerContextFilter\ncom.alibaba.dubbo.rpc.filter.ExceptionFilter\ncom.alibaba.dubbo.rpc.filter.ExecuteLimitFilter\ncom.alibaba.dubbo.rpc.filter.DeprecatedFilter\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxFilter.java (实现Filter接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Filter (纯文本文件,内容为:xxx=com.xxx.XxxFilter)\nXxxFilter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Filter;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxFilter implements Filter {\n    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {\n        // before filter ...\n        Result result = invoker.invoke(invocation);\n        // after filter ...\n        return result;\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Filter:\nxxx=com.xxx.XxxFilter\n\n"},"impls/invoker-listener.html":{"url":"impls/invoker-listener.html","title":"5.3 引用监听扩展","keywords":"","body":"引用监听扩展\n扩展说明\n当有服务引用时,触发该事件。\n扩展接口\ncom.alibaba.dubbo.rpc.InvokerListener\n扩展配置\n\n \n\n\n\n已知扩展\ncom.alibaba.dubbo.rpc.listener.DeprecatedInvokerListener\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxInvokerListener.java (实现InvokerListener接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.InvokerListener (纯文本文件,内容为:xxx=com.xxx.XxxInvokerListener)\nXxxInvokerListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.InvokerListener;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxInvokerListener implements InvokerListener {\n    public void referred(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public void destroyed(Invoker invoker) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.InvokerListener:\nxxx=com.xxx.XxxInvokerListener\n\n"},"impls/exporter-listener.html":{"url":"impls/exporter-listener.html","title":"5.4 暴露监听扩展","keywords":"","body":"暴露监听扩展\n扩展说明\n当有服务暴露时,触发该事件。\n扩展接口\ncom.alibaba.dubbo.rpc.ExporterListener\n扩展配置\n\n\n\n\n\n已知扩展\ncom.alibaba.dubbo.registry.directory.RegistryExporterListener\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExporterListener.java (实现ExporterListener接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ExporterListener (纯文本文件,内容为:xxx=com.xxx.XxxExporterListener)\nXxxExporterListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ExporterListener;\nimport com.alibaba.dubbo.rpc.Exporter;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxExporterListener implements ExporterListener {\n    public void exported(Exporter exporter) throws RpcException {\n        // ...\n    }\n    public void unexported(Exporter exporter) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ExporterListener:\nxxx=com.xxx.XxxExporterListener\n\n"},"impls/cluster.html":{"url":"impls/cluster.html","title":"5.5 集群扩展","keywords":"","body":"集群扩展\n扩展说明\n当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。\n扩展接口\ncom.alibaba.dubbo.rpc.cluster.Cluster\n扩展配置\n\n没有配置cluster时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.support.FailoverCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailfastCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailsafeCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailbackCluster\ncom.alibaba.dubbo.rpc.cluster.support.ForkingCluster\ncom.alibaba.dubbo.rpc.cluster.support.AvailableCluster\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCluster.java (实现Cluster接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Cluster (纯文本文件,内容为:xxx=com.xxx.XxxCluster)\nXxxCluster.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Cluster;\nimport com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker;\nimport com.alibaba.dubbo.rpc.cluster.Directory;\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxCluster implements Cluster {\n    public  Invoker merge(Directory directory) throws RpcException {\n        return new AbstractClusterInvoker(directory) {\n            public Result doInvoke(Invocation invocation, List> invokers, LoadBalance loadbalance) throws RpcException {\n                // ...\n            }\n        };\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Cluster:\nxxx=com.xxx.XxxCluster\n\n"},"impls/router.html":{"url":"impls/router.html","title":"5.6 路由扩展","keywords":"","body":"路由扩展\n扩展说明\n从多个服务提者方中选择一个进行调用。\n扩展接口\n\ncom.alibaba.dubbo.rpc.cluster.RouterFactory\ncom.alibaba.dubbo.rpc.cluster.Router\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.router.ScriptRouterFactory\ncom.alibaba.dubbo.rpc.cluster.router.FileRouterFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRouterFactory.java (实现LoadBalance接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.RouterFactory (纯文本文件,内容为:xxx=com.xxx.XxxRouterFactory)\nXxxRouterFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.RouterFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxRouterFactory implements RouterFactory {\n    public  List> select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.RouterFactory:\nxxx=com.xxx.XxxRouterFactory\n\n"},"impls/load-balance.html":{"url":"impls/load-balance.html","title":"5.7 负载均衡扩展","keywords":"","body":"负载均衡扩展\n扩展说明\n从多个服务提者方中选择一个进行调用\n扩展接口\ncom.alibaba.dubbo.rpc.cluster.LoadBalance\n扩展配置\n\n没有配置loadbalance时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoadBalance.java (实现LoadBalance接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.LoadBalance (纯文本文件,内容为:xxx=com.xxx.XxxLoadBalance)\nXxxLoadBalance.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException; \n\npublic class XxxLoadBalance implements LoadBalance {\n    public  Invoker select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance:\nxxx=com.xxx.XxxLoadBalance\n\n"},"impls/merger.html":{"url":"impls/merger.html","title":"5.8 合并结果扩展","keywords":"","body":"合并结果扩展\n扩展说明\n合并返回结果,用于分组聚合。\n扩展接口\ncom.alibaba.dubbo.rpc.cluster.Merger\n扩展配置\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.merger.ArrayMerger\ncom.alibaba.dubbo.rpc.cluster.merger.ListMerger\ncom.alibaba.dubbo.rpc.cluster.merger.SetMerger\ncom.alibaba.dubbo.rpc.cluster.merger.MapMerger\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMerger.java (实现Merger接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Merger (纯文本文件,内容为:xxx=com.xxx.XxxMerger)\nXxxMerger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Merger;\n\npublic class XxxMerger implements Merger {\n    public T merge(T... results) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Merger:\nxxx=com.xxx.XxxMerger\n\n"},"impls/registry.html":{"url":"impls/registry.html","title":"5.9 注册中心扩展","keywords":"","body":"注册中心扩展\n扩展说明\n负责服务的注册与发现。\n扩展接口\n\ncom.alibaba.dubbo.registry.RegistryFactory\ncom.alibaba.dubbo.registry.Registry\n\n扩展配置\n\n\n\n\n没有配置registry属性时,使用此配置 -->\n\n\n扩展契约\nRegistryFactory.java:\npublic interface RegistryFactory {\n    /**\n     * 连接注册中心.\n     * \n     * 连接注册中心需处理契约:\n     * 1. 当设置check=false时表示不检查连接,否则在连接不上时抛出异常。\n     * 2. 支持URL上的username:password权限认证。\n     * 3. 支持backup=10.20.153.10备选注册中心集群地址。\n     * 4. 支持file=registry.cache本地磁盘文件缓存。\n     * 5. 支持timeout=1000请求超时设置。\n     * 6. 支持session=60000会话超时或过期设置。\n     * \n     * @param url 注册中心地址,不允许为空\n     * @return 注册中心引用,总不返回空\n     */\n    Registry getRegistry(URL url); \n}\n\nRegistryService.java:\npublic interface RegistryService { // Registry extends RegistryService \n    /**\n     * 注册服务.\n     * \n     * 注册需处理契约:\n     * 1. 当URL设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。\n     * 2. 当URL设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。\n     * 3. 当URL设置了category=overrides时,表示分类存储,缺省类别为providers,可按分类部分通知数据。\n     * 4. 当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。\n     * 5. 允许URI相同但参数不同的URL并存,不能覆盖。\n     * \n     * @param url 注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void register(URL url);\n\n    /**\n     * 取消注册服务.\n     * \n     * 取消注册需处理契约:\n     * 1. 如果是dynamic=false的持久存储数据,找不到注册数据,则抛IllegalStateException,否则忽略。\n     * 2. 按全URL匹配取消注册。\n     * \n     * @param url 注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void unregister(URL url);\n\n    /**\n     * 订阅服务.\n     * \n     * 订阅需处理契约:\n     * 1. 当URL设置了check=false时,订阅失败后不报错,在后台定时重试。\n     * 2. 当URL设置了category=overrides,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。\n     * 3. 允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.BarService&version=1.0.0\n     * 4. 并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*\n     * 5. 当注册中心重启,网络抖动,需自动恢复订阅请求。\n     * 6. 允许URI相同但参数不同的URL并存,不能覆盖。\n     * 7. 必须阻塞订阅过程,等第一次通知完后再返回。\n     * \n     * @param url 订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener 变更事件监听器,不允许为空\n     */\n    void subscribe(URL url, NotifyListener listener);\n\n    /**\n     * 取消订阅服务.\n     * \n     * 取消订阅需处理契约:\n     * 1. 如果没有订阅,直接忽略。\n     * 2. 按全URL匹配取消订阅。\n     * \n     * @param url 订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener 变更事件监听器,不允许为空\n     */\n    void unsubscribe(URL url, NotifyListener listener);\n\n    /**\n     * 查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。\n     * \n     * @see com.alibaba.dubbo.registry.NotifyListener#notify(List)\n     * @param url 查询条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @return 已注册信息列表,可能为空,含义同{@link com.alibaba.dubbo.registry.NotifyListener#notify(List)}的参数。\n     */\n    List lookup(URL url);\n\n}\n\nNotifyListener.java:\npublic interface NotifyListener { \n    /**\n     * 当收到服务变更通知时触发。\n     * \n     * 通知需处理契约:\n     * 1. 总是以服务接口和数据类型为维度全量通知,即不会通知一个服务的同类型的部分数据,用户不需要对比上一次通知结果。\n     * 2. 订阅时的第一次通知,必须是一个服务的所有类型数据的全量通知。\n     * 3. 中途变更时,允许不同类型的数据分开通知,比如:providers, consumers, routes, overrides,允许只通知其中一种类型,但该类型的数据必须是全量的,不是增量的。\n     * 4. 如果一种类型的数据为空,需通知一个empty协议并带category参数的标识性URL数据。\n     * 5. 通知者(即注册中心实现)需保证通知的顺序,比如:单线程推送,队列串行化,带版本对比。\n     * \n     * @param urls 已注册信息列表,总不为空,含义同{@link com.alibaba.dubbo.registry.RegistryService#lookup(URL)}的返回值。\n     */\n    void notify(List urls);\n\n}\n\n已知扩展\ncom.alibaba.dubbo.registry.support.dubbo.DubboRegistryFactory\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRegistryFactoryjava (实现RegistryFactory接口)\n                |-XxxRegistry.java (实现Registry接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.registry.RegistryFactory (纯文本文件,内容为:xxx=com.xxx.XxxRegistryFactory)\nXxxRegistryFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.RegistryFactory;\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistryFactory implements RegistryFactory {\n    public Registry getRegistry(URL url) {\n        return new XxxRegistry(url);\n    }\n}\n\nXxxRegistry.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.registry.NotifyListener;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistry implements Registry {\n    public void register(URL url) {\n        // ...\n    }\n    public void unregister(URL url) {\n        // ...\n    }\n    public void subscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n    public void unsubscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory:\nxxx=com.xxx.XxxRegistryFactory\n\n"},"impls/monitor.html":{"url":"impls/monitor.html","title":"5.10 监控中心扩展","keywords":"","body":"监控中心扩展\n扩展说明\n负责服务调用次和调用时间的监控。\n扩展接口\n\ncom.alibaba.dubbo.monitor.MonitorFactory\ncom.alibaba.dubbo.monitor.Monitor\n\n扩展配置\n\n\n\n已知扩展\ncom.alibaba.dubbo.monitor.support.dubbo.DubboMonitorFactory\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMonitorFactoryjava (实现MonitorFactory接口)\n                |-XxxMonitor.java (实现Monitor接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.monitor.MonitorFactory (纯文本文件,内容为:xxx=com.xxx.XxxMonitorFactory)\nXxxMonitorFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.MonitorFactory;\nimport com.alibaba.dubbo.monitor.Monitor;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxMonitorFactory implements MonitorFactory {\n    public Monitor getMonitor(URL url) {\n        return new XxxMonitor(url);\n    }\n}\n\nXxxMonitor.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.Monitor;\n\npublic class XxxMonitor implements Monitor {\n    public void count(URL statistics) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.monitor.MonitorFactory:\nxxx=com.xxx.XxxMonitorFactory\n\n"},"impls/extension-factory.html":{"url":"impls/extension-factory.html","title":"5.11 扩展点加载扩展","keywords":"","body":"扩展点加载扩展\n扩展说明\n扩展点本身的加载容器,可从不同容器加载扩展点。\n扩展接口\ncom.alibaba.dubbo.common.extension.ExtensionFactory\n扩展配置\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.extension.factory.SpiExtensionFactory\ncom.alibaba.dubbo.config.spring.extension.SpringExtensionFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExtensionFactory.java (实现ExtensionFactory接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.extension.ExtensionFactory (纯文本文件,内容为:xxx=com.xxx.XxxExtensionFactory)\nXxxExtensionFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.extension.ExtensionFactory;\n\npublic class XxxExtensionFactory implements ExtensionFactory {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.extension.ExtensionFactory:\nxxx=com.xxx.XxxExtensionFactory\n\n"},"impls/proxy-factory.html":{"url":"impls/proxy-factory.html","title":"5.12 动态代理扩展","keywords":"","body":"动态代理扩展\n扩展说明\n将 Invoker 接口转换成业务接口。\n扩展接口\ncom.alibaba.dubbo.rpc.ProxyFactory\n扩展配置\n\n没有配置proxy属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.proxy.JdkProxyFactory\ncom.alibaba.dubbo.rpc.proxy.JavassistProxyFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProxyFactory.java (实现ProxyFactory接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ProxyFactory (纯文本文件,内容为:xxx=com.xxx.XxxProxyFactory)\nXxxProxyFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ProxyFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxProxyFactory implements ProxyFactory {\n    public  T getProxy(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public  Invoker getInvoker(T proxy, Class type, URL url) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ProxyFactory:\nxxx=com.xxx.XxxProxyFactory\n\n"},"impls/compiler.html":{"url":"impls/compiler.html","title":"5.13 编译器扩展","keywords":"","body":"编译器扩展\n扩展说明\nJava 代码编译器,用于动态生成字节码,加速调用。\n扩展接口\ncom.alibaba.dubbo.common.compiler.Compiler\n扩展配置\n自动加载\n已知扩展\n\ncom.alibaba.dubbo.common.compiler.support.JdkCompiler\ncom.alibaba.dubbo.common.compiler.support.JavassistCompiler\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCompiler.java (实现Compiler接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.compiler.Compiler (纯文本文件,内容为:xxx=com.xxx.XxxCompiler)\nXxxCompiler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.compiler.Compiler;\n\npublic class XxxCompiler implements Compiler {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.compiler.Compiler:\nxxx=com.xxx.XxxCompiler\n\n"},"impls/dispatcher.html":{"url":"impls/dispatcher.html","title":"5.14 消息派发扩展","keywords":"","body":"消息派发扩展\n扩展说明\n通道信息派发器,用于指定线程池模型。\n扩展接口\ncom.alibaba.dubbo.remoting.Dispatcher\n扩展配置\n\n没有配置dispatcher属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.transport.dispatcher.all.AllDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxDispatcher.java (实现Dispatcher接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Dispatcher (纯文本文件,内容为:xxx=com.xxx.XxxDispatcher)\nXxxDispatcher.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Dispatcher;\n\npublic class XxxDispatcher implements Dispatcher {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Dispatcher:\nxxx=com.xxx.XxxDispatcher\n\n"},"impls/threadpool.html":{"url":"impls/threadpool.html","title":"5.15 线程池扩展","keywords":"","body":"线程池扩展\n扩展说明\n服务提供方线程程实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。\n扩展接口\ncom.alibaba.dubbo.common.threadpool.ThreadPool\n扩展配置\n\n没有配置threadpool时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.threadpool.FixedThreadPool\ncom.alibaba.dubbo.common.threadpool.CachedThreadPool\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxThreadPool.java (实现ThreadPool接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.threadpool.ThreadPool (纯文本文件,内容为:xxx=com.xxx.XxxThreadPool)\nXxxThreadPool.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.threadpool.ThreadPool;\nimport java.util.concurrent.Executor;\n\npublic class XxxThreadPool implements ThreadPool {\n    public Executor getExecutor() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.threadpool.ThreadPool:\nxxx=com.xxx.XxxThreadPool\n\n"},"impls/serialize.html":{"url":"impls/serialize.html","title":"5.16 序列化扩展","keywords":"","body":"序列化扩展\n扩展说明\n将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。\n扩展接口\n\ncom.alibaba.dubbo.common.serialize.Serialization\ncom.alibaba.dubbo.common.serialize.ObjectInput\ncom.alibaba.dubbo.common.serialize.ObjectOutput\n\n扩展配置\n\n\n没有配置serialization时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.serialize.dubbo.DubboSerialization\ncom.alibaba.dubbo.common.serialize.hessian.Hessian2Serialization\ncom.alibaba.dubbo.common.serialize.java.JavaSerialization\ncom.alibaba.dubbo.common.serialize.java.CompactedJavaSerialization\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxSerialization.java (实现Serialization接口)\n                |-XxxObjectInput.java (实现ObjectInput接口)\n                |-XxxObjectOutput.java (实现ObjectOutput接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.serialize.Serialization (纯文本文件,内容为:xxx=com.xxx.XxxSerialization)\nXxxSerialization.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.serialize.Serialization;\nimport com.alibaba.dubbo.common.serialize.ObjectInput;\nimport com.alibaba.dubbo.common.serialize.ObjectOutput;\n\n\npublic class XxxSerialization implements Serialization {\n    public ObjectOutput serialize(Parameters parameters, OutputStream output) throws IOException {\n        return new XxxObjectOutput(output);\n    }\n    public ObjectInput deserialize(Parameters parameters, InputStream input) throws IOException {\n        return new XxxObjectInput(input);\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.serialize.Serialization:\nxxx=com.xxx.XxxSerialization\n\n"},"impls/remoting.html":{"url":"impls/remoting.html","title":"5.17 网络传输扩展","keywords":"","body":"网络传输扩展\n扩展说明\n远程通讯的服务器及客户端传输实现。\n扩展接口\n\ncom.alibaba.dubbo.remoting.Transporter\ncom.alibaba.dubbo.remoting.Server\ncom.alibaba.dubbo.remoting.Client\n\n扩展配置\n\n \n\n \n没有配置transporter/server/client属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.transport.transporter.netty.NettyTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.mina.MinaTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.grizzly.GrizzlyTransporter\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTransporter.java (实现Transporter接口)\n                |-XxxServer.java (实现Server接口)\n                |-XxxClient.java (实现Client接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Transporter (纯文本文件,内容为:xxx=com.xxx.XxxTransporter)\nXxxTransporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Transporter;\n\npublic class XxxTransporter implements Transporter {\n    public Server bind(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxServer(url, handler);\n    }\n    public Client connect(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxClient(url, handler);\n    }\n}\n\nXxxServer.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractServer;\n\npublic class XxxServer extends AbstractServer {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    public Collection getChannels() {\n        // ...\n    }\n    public Channel getChannel(InetSocketAddress remoteAddress) {\n        // ...\n    }\n}\n\nXxxClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractClient;\n\npublic class XxxClient extends AbstractClient {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    protected void doConnect() throws Throwable {\n        // ...\n    }\n    public Channel getChannel() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Transporter:\nxxx=com.xxx.XxxTransporter\n\n"},"impls/exchanger.html":{"url":"impls/exchanger.html","title":"5.18 信息交换扩展","keywords":"","body":"信息交换扩展\n扩展说明\n基于传输层之上,实现 Request-Response 信息交换语义。\n扩展接口\n\ncom.alibaba.dubbo.remoting.exchange.Exchanger\ncom.alibaba.dubbo.remoting.exchange.ExchangeServer\ncom.alibaba.dubbo.remoting.exchange.ExchangeClient\n\n扩展配置\n\n没有配置exchanger属性时,使用此配置 -->\n\n\n已知扩展\ncom.alibaba.dubbo.remoting.exchange.exchanger.HeaderExchanger\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExchanger.java (实现Exchanger接口)\n                |-XxxExchangeServer.java (实现ExchangeServer接口)\n                |-XxxExchangeClient.java (实现ExchangeClient接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.exchange.Exchanger (纯文本文件,内容为:xxx=com.xxx.XxxExchanger)\nXxxExchanger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.Exchanger;\n\n\npublic class XxxExchanger implements Exchanger {\n    public ExchangeServer bind(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeServer(url, handler);\n    }\n    public ExchangeClient connect(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeClient(url, handler);\n    }\n}\n\nXxxExchangeServer.java:\n\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeServer;\n\npublic class XxxExchangeServer impelements ExchangeServer {\n    // ...\n}\n\nXxxExchangeClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeClient;\n\npublic class XxxExchangeClient impelments ExchangeClient {\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.exchange.Exchanger:\nxxx=com.xxx.XxxExchanger\n\n"},"impls/networker.html":{"url":"impls/networker.html","title":"5.19 组网扩展","keywords":"","body":"组网扩展\n扩展说明\n对等网络节点组网器。\n扩展接口\ncom.alibaba.dubbo.remoting.p2p.Networker\n扩展配置\n\n没有配置networker属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.p2p.support.MulticastNetworker\ncom.alibaba.dubbo.remoting.p2p.support.FileNetworker\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxNetworker.java (实现Networker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.p2p.Networker (纯文本文件,内容为:xxx=com.xxx.XxxNetworker)\nXxxNetworker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.p2p.Networker;\n\npublic class XxxNetworker implements Networker {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.p2p.Networker:\nxxx=com.xxx.XxxNetworker\n\n"},"impls/telnet-handler.html":{"url":"impls/telnet-handler.html","title":"5.20 Telnet 命令扩展","keywords":"","body":"Telnet 命令扩展\n扩展说明\n所有服务器均支持 telnet 访问,用于人工干预。\n扩展接口\ncom.alibaba.dubbo.remoting.telnet.TelnetHandler\n扩展配置\n\n没有配置telnet属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.telnet.support.ClearTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.ExitTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.HelpTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.StatusTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ListTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ChangeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CurrentTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.InvokeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.TraceTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CountTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.PortTelnetHandler\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTelnetHandler.java (实现TelnetHandler接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.telnet.TelnetHandler (纯文本文件,内容为:xxx=com.xxx.XxxTelnetHandler)\nXxxTelnetHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.telnet.TelnetHandler;\n\n@Help(parameter=\"...\", summary=\"...\", detail=\"...\")\n\npublic class XxxTelnetHandler implements TelnetHandler {\n    public String telnet(Channel channel, String message) throws RemotingException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.telnet.TelnetHandler:\nxxx=com.xxx.XxxTelnetHandler\n\n用法\ntelnet 127.0.0.1 20880\ndubbo> xxx args\n\n"},"impls/status-checker.html":{"url":"impls/status-checker.html","title":"5.21 状态检查扩展","keywords":"","body":"状态检查扩展\n扩展说明\n检查服务依赖各种资源的状态,此状态检查可同时用于 telnet 的 status 命令和 hosting 的 status 页面。\n扩展接口\ncom.alibaba.dubbo.common.status.StatusChecker\n扩展配置\n\n没有配置status属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.status.support.MemoryStatusChecker\ncom.alibaba.dubbo.common.status.support.LoadStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ServerStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ThreadPoolStatusChecker\ncom.alibaba.dubbo.registry.directory.RegistryStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.SpringStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.DataSourceStatusChecker\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxStatusChecker.java (实现StatusChecker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.status.StatusChecker (纯文本文件,内容为:xxx=com.xxx.XxxStatusChecker)\nXxxStatusChecker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.status.StatusChecker;\n\npublic class XxxStatusChecker implements StatusChecker {\n    public Status check() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.status.StatusChecker:\nxxx=com.xxx.XxxStatusChecker\n\n"},"impls/container.html":{"url":"impls/container.html","title":"5.22 容器扩展","keywords":"","body":"容器扩展\n扩展说明\n服务容器扩展,用于自定义加载内容。\n扩展接口\ncom.alibaba.dubbo.container.Container\n扩展配置\njava com.alibaba.dubbo.container.Main spring jetty log4j\n\n已知扩展\n\ncom.alibaba.dubbo.container.spring.SpringContainer\ncom.alibaba.dubbo.container.spring.JettyContainer\ncom.alibaba.dubbo.container.spring.Log4jContainer\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxContainer.java (实现Container接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.Container (纯文本文件,内容为:xxx=com.xxx.XxxContainer)\nXxxContainer.java:\npackage com.xxx;\n\ncom.alibaba.dubbo.container.Container;\n\n\npublic class XxxContainer implements Container {\n    public Status start() {\n        // ...\n    }\n    public Status stop() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.Container:\nxxx=com.xxx.XxxContainer\n\n"},"impls/page.html":{"url":"impls/page.html","title":"5.23 页面扩展","keywords":"","body":"页面扩展\n扩展说明\n对等网络节点组网器。\n扩展接口\ncom.alibaba.dubbo.container.page.PageHandler\n扩展配置\n\n没有配置page属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.container.page.pages.HomePageHandler\ncom.alibaba.dubbo.container.page.pages.StatusPageHandler\ncom.alibaba.dubbo.container.page.pages.LogPageHandler\ncom.alibaba.dubbo.container.page.pages.SystemPageHandler\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxPageHandler.java (实现PageHandler接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.page.PageHandler (纯文本文件,内容为:xxx=com.xxx.XxxPageHandler)\nXxxPageHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.container.page.PageHandler;\n\npublic class XxxPageHandler implements PageHandler {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.page.PageHandler:\nxxx=com.xxx.XxxPageHandler\n\n"},"impls/cache.html":{"url":"impls/cache.html","title":"5.24 缓存扩展","keywords":"","body":"缓存扩展\n扩展说明\n用请求参数作为 key,缓存返回结果。\n扩展接口\ncom.alibaba.dubbo.cache.CacheFactory\n扩展配置\n\n\n \n没有配置cache属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.cache.support.lru.LruCacheFactory\ncom.alibaba.dubbo.cache.support.threadlocal.ThreadLocalCacheFactory\ncom.alibaba.dubbo.cache.support.jcache.JCacheFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCacheFactory.java (实现StatusChecker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.cache.CacheFactory (纯文本文件,内容为:xxx=com.xxx.XxxCacheFactory)\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.CacheFactory;\n\npublic class XxxCacheFactory implements CacheFactory {\n    public Cache getCache(URL url, String name) {\n        return new XxxCache(url, name);\n    }\n}\n\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.Cache;\n\npublic class XxxCache implements Cache {\n    public Cache(URL url, String name) {\n        // ...\n    }\n    public void put(Object key, Object value) {\n        // ...\n    }\n    public Object get(Object key) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.cache.CacheFactory:\nxxx=com.xxx.XxxCacheFactory\n\n"},"impls/validation.html":{"url":"impls/validation.html","title":"5.25 验证扩展","keywords":"","body":"验证扩展\n扩展说明\n参数验证扩展点。\n扩展接口\ncom.alibaba.dubbo.validation.Validation\n扩展配置\n\n没有配置validation属性时,使用此配置 -->\n\n\n已知扩展\ncom.alibaba.dubbo.validation.support.jvalidation.JValidation\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxValidation.java (实现Validation接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.validation.Validation (纯文本文件,内容为:xxx=com.xxx.XxxValidation)\nXxxValidation.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validation;\n\npublic class XxxValidation implements Validation {\n    public Object getValidator(URL url) {\n        // ...\n    }\n}\n\nXxxValidator.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validator;\n\npublic class XxxValidator implements Validator {\n    public XxxValidator(URL url) {\n        // ...\n    }\n    public void validate(Invocation invocation) throws Exception {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.validation.Validation:\nxxx=com.xxx.XxxValidation\n\n"},"impls/logger-adapter.html":{"url":"impls/logger-adapter.html","title":"5.26 日志适配扩展","keywords":"","body":"日志适配扩展\n扩展说明\n日志输出适配扩展点。\n扩展接口\ncom.alibaba.dubbo.common.logger.LoggerAdapter\n扩展配置\n\n\n或者:\n-Ddubbo:application.logger=xxx\n\n已知扩展\n\ncom.alibaba.dubbo.common.logger.slf4j.Slf4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jcl.JclLoggerAdapter\ncom.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jdk.JdkLoggerAdapter\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoggerAdapter.java (实现LoggerAdapter接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.logger.LoggerAdapter (纯文本文件,内容为:xxx=com.xxx.XxxLoggerAdapter)\nXxxLoggerAdapter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.LoggerAdapter;\n\npublic class XxxLoggerAdapter implements LoggerAdapter {\n    public Logger getLogger(URL url) {\n        // ...\n    }\n}\n\nXxxLogger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.Logger;\n\npublic class XxxLogger implements Logger {\n    public XxxLogger(URL url) {\n        // ...\n    }\n    public void info(String msg) {\n        // ...\n    }\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.logger.LoggerAdapter:\nxxx=com.xxx.XxxLoggerAdapter\n\n"},"contract.html":{"url":"contract.html","title":"6 公共契约","keywords":"","body":"公共契约\n这里记录的是 Dubbo 公共契约,希望所有扩展点遵守。\nURL\n\n所有扩展点参数都包含 URL 参数,URL 作为上下文信息贯穿整个扩展点设计体系。\nURL 采用标准格式:protocol://username:password@host:port/path?key=value&key=value\n\n日志\n\n如果不可恢复或需要报警,打印 ERROR 日志。\n如果可恢复异常,或瞬时的状态不一致,打印 WARN 日志。\n正常运行时的中间状态提示,打印 INFO 日志。\n\n"},"coding.html":{"url":"coding.html","title":"7 编码约定","keywords":"","body":"编码约定\n代码风格\nDubbo 的源代码和 JavaDoc 遵循以下的规范:\n\nCode Conventions for the Java Programming Language\nHow to Write Doc Comments for the Javadoc Tool\n\n异常和日志\n\n尽可能携带完整的上下文信息,比如出错原因,出错的机器地址,调用对方的地址,连的注册中心地址,使用 Dubbo 的版本等。\n尽量将直接原因写在最前面,所有上下文信息,在原因后用键值对显示。\n抛出异常的地方不用打印日志,由最终处理异常者决定打印日志的级别,吃掉异常必需打印日志。\n打印 ERROR 日志表示需要报警,打印 WARN 日志表示可以自动恢复,打印 INFO 表示正常信息或完全不影响运行。\n建议应用方在监控中心配置 ERROR 日志实时报警,WARN 日志每周汇总发送通知。\nRpcException 是 Dubbo 对外的唯一异常类型,所有内部异常,如果要抛出给用户,必须转为 RpcException。\nRpcException 不能有子类型,所有类型信息用 ErrorCode 标识,以便保持兼容。\n\n配置和 URL\n\n配置对象属性首字母小写,多个单词用驼峰命名 1。\n配置属性全部用小写,多个单词用\"-\"号分隔 2。\nURL参数全部用小写,多个单词用\".\"号分隔 3。\n尽可能用 URL 传参,不要自定义 Map 或其它上下文格式,配置信息也转成 URL 格式使用。\n尽量减少 URL 嵌套,保持 URL 的简洁性。\n\n单元和集成测试\n\n单元测试统一用 JUnit 和 EasyMock,集成测试用 TestNG,数据库测试用 DBUnit。\n保持单元测试用例的运行速度,不要将性能和大的集成用例放在单元测试中。\n保持单元测试的每个用例都用 try...finally 或 tearDown 释放资源。\n减少 while 循环等待结果的测试用例,对定时器和网络的测试,用以将定时器中的逻辑抽为方法测试。\n对于容错行为的测试,比如 failsafe 的测试,统一用 LogUtil 断言日志输出。\n\n扩展点基类与 AOP\n\nAOP 类都命名为 XxxWrapper,基类都命名为 AbstractXxx。\n扩展点之间的组合将关系由 AOP 完成,ExtensionLoader 只负载加载扩展点,包括 AOP 扩展。\n尽量采用 IoC 注入扩展点之间的依赖,不要直接依赖 ExtensionLoader 的工厂方法。\n尽量采用 AOP 实现扩展点的通用行为,而不要用基类,比如负载均衡之前的 isAvailable 检查,它是独立于负载均衡之外的,不需要检查的是URL参数关闭。\n对多种相似类型的抽象,用基类实现,比如 RMI, Hessian 等第三方协议都已生成了接口代理,只需将将接口代理转成 Invoker 即可完成桥接,它们可以用公共基类实现此逻辑。\n基类也是 SPI 的一部分,每个扩展点都应该有方便使用的基类支持。\n\n模块与分包\n\n基于复用度分包,总是一起使用的放在同一包下,将接口和基类分成独立模块,大的实现也使用独立模块。\n所有接口都放在模块的根包下,基类放在 support 子包下,不同实现用放在以扩展点名字命名的子包下。\n尽量保持子包依赖父包,而不要反向。\n\n\n1. Java 约定 ↩\n\n\n2. Spring 约定 ↩\n\n\n3. Dubbo 约定 ↩\n\n"},"principals/introduction.html":{"url":"principals/introduction.html","title":"8 设计原则","keywords":"","body":"设计原则\n本章节的设计原则摘录自梁飞在 javaeye 上发表的系列文章。\n"},"principals/code-detail.html":{"url":"principals/code-detail.html","title":"8.1 魔鬼在细节","keywords":"","body":"魔鬼在细节\n\nhttp://javatar.iteye.com/blog/1056664\n\n最近一直担心 Dubbo 分布式服务框架后续如果维护人员增多或变更,会出现质量的下降, 我在想,有没有什么是需要大家共同遵守的,根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节。可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记。在每一行代码中都考虑这些因素,是需要很大耐心的, 大家经常说,魔鬼在细节中,确实如此。 \n防止空指针和下标越界\n这是我最不喜欢看到的异常,尤其在核心框架中,我更愿看到信息详细的参数不合法异常。这也是一个健状的程序开发人员,在写每一行代码都应在潜意识中防止的异常。基本上要能确保一次写完的代码,在不测试的情况,都不会出现这两个异常才算合格。 \n保证线程安全性和可见性\n对于框架的开发人员,对线程安全性和可见性的深入理解是最基本的要求。需要开发人员,在写每一行代码时都应在潜意识中确保其正确性。因为这种代码,在小并发下做功能测试时,会显得很正常。但在高并发下就会出现莫明其妙的问题,而且场景很难重现,极难排查。 \n尽早失败和前置断言\n尽早失败也应该成为潜意识,在有传入参数和状态变化时,均在入口处全部断言。一个不合法的值和状态,在第一时间就应报错,而不是等到要用时才报错。因为等到要用时,可能前面已经修改其它相关状态,而在程序中很少有人去处理回滚逻辑。这样报错后,其实内部状态可能已经混乱,极易在一个隐蔽分支上引发程序不可恢复。 \n分离可靠操作和不可靠操作\n这里的可靠是狭义的指是否会抛出异常或引起状态不一致,比如,写入一个线程安全的 Map,可以认为是可靠的,而写入数据库等,可以认为是不可靠的。开发人员必须在写每一行代码时,都注意它的可靠性与否,在代码中尽量划分开,并对失败做异常处理,并为容错,自我保护,自动恢复或切换等补偿逻辑提供清晰的切入点,保证后续增加的代码不至于放错位置,而导致原先的容错处理陷入混乱。 \n异常防御,但不忽略异常\n这里讲的异常防御,指的是对非必须途径上的代码进行最大限度的容忍,包括程序上的 BUG,比如:获取程序的版本号,会通过扫描 Manifest 和 jar 包名称抓取版本号,这个逻辑是辅助性的,但代码却不少,初步测试也没啥问题,但应该在整个 getVersion() 中加上一个全函数的 try-catch 打印错误日志,并返回基本版本,因为 getVersion() 可能存在未知特定场景异常,或被其他的开发人员误修改逻辑(但一般人员不会去掉 try-catch),而如果它抛出异常会导致主流程异常,这是我们不希望看到的。但这里要控制个度,不要随意 try-catch,更不要无声无息的吃掉异常。 \n缩小可变域和尽量 final\n如果一个类可以成为不变类(Immutable Class),就优先将它设计成不变类。不变类有天然的并发共享优势,减少同步或复制,而且可以有效帮忙分析线程安全的范围。就算是可变类,对于从构造函数传入的引用,在类中持有时,最好将字段 final,以免被中途误修改引用。不要以为这个字段是私有的,这个类的代码都是我自己写的,不会出现对这个字段的重新赋值。要考虑的一个因素是,这个代码可能被其他人修改,他不知道你的这个弱约定,final 就是一个不变契约。 \n降低修改时的误解性,不埋雷\n前面不停的提到代码被其他人修改,这也开发人员要随时紧记的。这个其他人包括未来的自己,你要总想着这个代码可能会有人去改它。我应该给修改的人一点什么提示,让他知道我现在的设计意图,而不要在程序里面加潜规则,或埋一些容易忽视的雷,比如:你用 null 表示不可用,size 等于 0 表示黑名单,这就是一个雷,下一个修改者,包括你自己,都不会记得有这样的约定,可能后面为了改某个其它 BUG,不小心改到了这里,直接引爆故障。对于这个例子,一个原则就是永远不要区分 null 引用和 empty 值。 \n提高代码的可测性\n这里的可测性主要指 Mock 的容易程度,和测试的隔离性。至于测试的自动性,可重复性,非偶然性,无序性,完备性(全覆盖),轻量性(可快速执行),一般开发人员,加上 JUnit 等工具的辅助基本都能做到,也能理解它的好处,只是工作量问题。这里要特别强调的是测试用例的单一性(只测目标类本身)和隔离性(不传染失败)。现在的测试代码,过于强调完备性,大量重复交叉测试,看起来没啥坏处,但测试代码越多,维护代价越高。经常出现的问题是,修改一行代码或加一个判断条件,引起 100 多个测试用例不通过。时间一紧,谁有这个闲功夫去改这么多形态各异的测试用例?久而久之,这个测试代码就已经不能真实反应代码现在的状况,很多时候会被迫绕过。最好的情况是,修改一行代码,有且只有一行测试代码不通过。如果修改了代码而测试用例还能通过,那也不行,表示测试没有覆盖到。另外,可 Mock 性是隔离的基础,把间接依赖的逻辑屏蔽掉。可 Mock 性的一个最大的杀手就是静态方法,尽量少用。 \n"},"principals/general-knowledge.html":{"url":"principals/general-knowledge.html","title":"8.2 一些设计上的基本常识","keywords":"","body":"一些设计上的基本常识\n\nhttp://javatar.iteye.com/blog/706098\n\n最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里。 \nAPI 与 SPI 分离\n框架或组件通常有两类客户,一个是使用者,一个是扩展者。API (Application Programming Interface) 是给使用者用的,而 SPI (Service Provide Interface) 是给扩展者用的。在设计时,尽量把它们隔离开,而不要混在一起。也就是说,使用者是看不到扩展者写的实现的。\n比如:一个 Web 框架,它有一个 API 接口叫 Action,里面有个 execute() 方法,是给使用者用来写业务逻辑的。然后,Web 框架有一个 SPI 接口给扩展者控制输出方式,比如用 velocity 模板输出还是用 json 输出等。如果这个 Web 框架使用一个都继承 Action 的 VelocityAction 和一个 JsonAction 做为扩展方式,要用 velocity 模板输出的就继承 VelocityAction,要用 json 输出的就继承 JsonAction,这就是 API 和 SPI 没有分离的反面例子,SPI 接口混在了 API 接口中。\n\n合理的方式是,有一个单独的 Renderer 接口,有 VelocityRenderer 和 JsonRenderer 实现,Web 框架将 Action 的输出转交给 Renderer 接口做渲染输出。 \n\n服务域/实体域/会话域分离\n任何框架或组件,总会有核心领域模型,比如:Spring 的 Bean,Struts 的 Action,Dubbo 的 Service,Napoli 的 Queue 等等。这个核心领域模型及其组成部分称为实体域,它代表着我们要操作的目标本身。实体域通常是线程安全的,不管是通过不变类,同步状态,或复制的方式。\n服务域也就是行为域,它是组件的功能集,同时也负责实体域和会话域的生命周期管理, \n比如 Spring 的 ApplicationContext,Dubbo 的 ServiceManager 等。服务域的对象通常会比较重,而且是线程安全的,并以单一实例服务于所有调用。\n什么是会话?就是一次交互过程。会话中重要的概念是上下文,什么是上下文?比如我们说:“老地方见”,这里的“老地方”就是上下文信息。为什么说“老地方”对方会知道,因为我们前面定义了“老地方”的具体内容。所以说,上下文通常持有交互过程中的状态变量等。会话对象通常较轻,每次请求都重新创建实例,请求结束后销毁。简而言之:把元信息交由实体域持有,把一次请求中的临时状态由会话域持有,由服务域贯穿整个过程。 \n\n在重要的过程上设置拦截接口\n如果你要写个远程调用框架,那远程调用的过程应该有一个统一的拦截接口。如果你要写一个 ORM 框架,那至少 SQL 的执行过程,Mapping 过程要有拦截接口;如果你要写一个 Web 框架,那请求的执行过程应该要有拦截接口,等等。没有哪个公用的框架可以 Cover 住所有需求,允许外置行为,是框架的基本扩展方式。这样,如果有人想在远程调用前,验证下令牌,验证下黑白名单,统计下日志;如果有人想在 SQL 执行前加下分页包装,做下数据权限控制,统计下 SQL 执行时间;如果有人想在请求执行前检查下角色,包装下输入输出流,统计下请求量,等等,就可以自行完成,而不用侵入框架内部。拦截接口,通常是把过程本身用一个对象封装起来,传给拦截器链,比如:远程调用主过程为 invoke(),那拦截器接口通常为 invoke(Invocation),Invocation 对象封装了本来要执行过程的上下文,并且 Invocation 里有一个 invoke() 方法,由拦截器决定什么时候执行,同时,Invocation 也代表拦截器行为本身,这样上一拦截器的 Invocation 其实是包装的下一拦截器的过程,直到最后一个拦截器的 Invocation 是包装的最终的 invoke() 过程;同理,SQL 主过程为 execute(),那拦截器接口通常为 execute(Execution),原理一样。当然,实现方式可以任意,上面只是举例。 \n\n重要的状态的变更发送事件并留出监听接口\n这里先要讲一个事件和上面拦截器的区别,拦截器是干预过程的,它是过程的一部分,是基于过程行为的,而事件是基于状态数据的,任何行为改变的相同状态,对事件应该是一致的。事件通常是事后通知,是一个 Callback 接口,方法名通常是过去式的,比如 onChanged()。比如远程调用框架,当网络断开或连上应该发出一个事件,当出现错误也可以考虑发出一个事件,这样外围应用就有可能观察到框架内部的变化,做相应适应。 \n\n扩展接口职责尽可能单一,具有可组合性\n比如,远程调用框架它的协议是可以替换的。如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持是可以细分为底层通讯,序列化,动态代理方式等等。如果将接口拆细,正交分解,会更便于扩展者复用已有逻辑,而只是替换某部分实现策略。当然这个分解的粒度需要把握好。 \n微核插件式,平等对待第三方\n大凡发展的比较好的框架,都遵守微核的理念。Eclipse 的微核是 OSGi, Spring 的微核是 BeanFactory,Maven 的微核是 Plexus。通常核心是不应该带有功能性的,而是一个生命周期和集成容器,这样各功能可以通过相同的方式交互及扩展,并且任何功能都可以被替换。如果做不到微核,至少要平等对待第三方,即原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到。原作者要把自己也当作扩展者,这样才能保证框架的可持续性及由内向外的稳定性。 \n不要控制外部对象的生命周期\n比如上面说的 Action 使用接口和 Renderer 扩展接口。框架如果让使用者或扩展者把 Action 或 Renderer 实现类的类名或类元信息报上来,然后在内部通过反射 newInstance() 创建一个实例,这样框架就控制了 Action 或 Renderer 实现类的生命周期,Action 或 Renderer 的生老病死,框架都自己做了,外部扩展或集成都无能为力。好的办法是让使用者或扩展者把 Action 或 Renderer 实现类的实例报上来,框架只是使用这些实例,这些对象是怎么创建的,怎么销毁的,都和框架无关,框架最多提供工具类辅助管理,而不是绝对控制。 \n可配置一定可编程,并保持友好的 CoC 约定\n因为使用环境的不确定因素很多,框架总会有一些配置,一般都会到 classpath 直扫某个指定名称的配置,或者启动时允许指定配置路径。做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行,否则当使用者需要将你的框架与另一个框架集成时就会带来很多不必要的麻烦。\n另外,尽可能做一个标准约定,如果用户按某种约定做事时,就不需要该配置项。比如:配置模板位置,你可以约定,如果放在 templates 目录下就不用配了,如果你想换个目录,就配置下。 \n区分命令与查询,明确前置条件与后置条件\n这个是契约式设计的一部分,尽量遵守有返回值的方法是查询方法,void 返回的方法是命令。查询方法通常是幂等性的,无副作用的,也就是不改变任何状态,调 n 次结果都是一样的,比如 get 某个属性值,或查询一条数据库记录。命令是指有副作用的,也就是会修改状态,比如 set 某个值,或 update 某条数据库记录。如果你的方法即做了修改状态的操作,又做了查询返回,如果可能,将其拆成写读分离的两个方法,比如:User deleteUser(id),删除用户并返回被删除的用户,考虑改为 getUser() 和 void 的 deleteUser()。 另外,每个方法都尽量前置断言传入参数的合法性,后置断言返回结果的合法性,并文档化。 \n增量式扩展,而不要扩充原始核心概念\n参见:谈谈扩充式扩展与增量式扩展\n"},"principals/expansibility.html":{"url":"principals/expansibility.html","title":"8.3 谈谈扩充式扩展与增量式扩展","keywords":"","body":"谈谈扩充式扩展与增量式扩展\n\nhttp://javatar.iteye.com/blog/690845\n\n我们平台的产品越来越多,产品的功能也越来越多。平台的产品为了适应各 BU 和部门以及产品线的需求,势必会将很多不相干的功能凑在一起,客户可以选择性的使用。为了兼容更多的需求,每个产品,每个框架,都在不停的扩展,而我们经常会选择一些扩展的扩展方式,也就是将新旧功能扩展成一个通用实现。我想讨论是,有些情况下也可以考虑增量式的扩展方式,也就是保留原功能的简单性,新功能独立实现。我最近一直做分布式服务框架的开发,就拿我们项目中的问题开涮吧。 \n比如:远程调用框架,肯定少不了序列化功能,功能很简单,就是把流转成对象,对象转成流。但因有些地方可能会使用 osgi,这样序列化时,IO 所在的 ClassLoader 可能和业务方的 ClassLoader 是隔离的。需要将流转换成 byte[] 数组,然后传给业务方的 ClassLoader 进行序列化。为了适应 osgi 需求,把原来非 osgi 与 osgi 的场景扩展了一下,这样,不管是不是 osgi 环境,都先将流转成 byte[] 数组,拷贝一次。然而,大部分场景都用不上 osgi,却为 osgi 付出了代价。而如果采用增量式扩展方式,非 osgi 的代码原封不动,再加一个 osgi 的实现,要用 osgi 的时候,直接依赖 osgi 实现即可。 \n再比如:最开始,远程服务都是基于接口方法,进行透明化调用的。这样,扩展接口就是, invoke(Method method, Object[] args),后来,有了无接口调用的需求,就是没有接口方法也能调用,并将 POJO 对象都转换成 Map 表示。因为 Method 对象是不能直接 new 出来的,我们不自觉选了一个扩展式扩展,把扩展接口改成了 invoke(String methodName, String[] parameterTypes, String returnTypes, Object[] args),导致不管是不是无接口调用,都得把 parameterTypes 从 Class[] 转成 String[]。如果选用增量式扩展,应该是保持原有接口不变,增加一个 GeneralService 接口,里面有一个通用的 invoke() 方法,和其它正常业务上的接口一样的调用方式,扩展接口也不用变,只是 GeneralServiceImpl 的 invoke() 实现会将收到的调用转给目标接口,这样就能将新功能增量到旧功能上,并保持原来结构的简单性。 \n再再比如:无状态消息发送,很简单,序列化一个对象发过去就行。后来有了同步消息发送需求,需要一个 Request/Response 进行配对,采用扩展式扩展,自然想到,无状态消息其实是一个没有 Response 的 Request,所以在 Request 里加一个 boolean 状态,表示要不要返回 Response。如果再来一个会话消息发送需求,那就再加一个 Session 交互,然后发现,原来同步消息发送是会话消息的一种特殊情况,所有场景都传 Session,不需要 Session 的地方无视即可。\n\n如果采用增量式扩展,无状态消息发送原封不动,同步消息发送,在无状态消息基础上加一个 Request/Response 处理,会话消息发送,再加一个 SessionRequest/SessionResponse 处理。 \n\n"},"principals/configuration.html":{"url":"principals/configuration.html","title":"8.4 配置设计","keywords":"","body":"配置设计\n\nhttp://javatar.iteye.com/blog/949527\n\nDubbo 现在的设计是完全无侵入,也就是使用者只依赖于配置契约。经过多个版本的发展,为了满足各种需求场景,配置越来越多。为了保持兼容,配置只增不减,里面潜伏着各种风格,约定,规则。新版本也将配置做了一次调整,去掉了 dubbo.properties,改为全 spring 配置。将想到的一些记在这,备忘。 \n配置分类\n首先,配置的用途是有多种的,大致可以分为: \n\n环境配置,比如:连接数,超时等配置。 \n描述配置,比如:服务接口描述,服务版本等。 \n扩展配置,比如:协议扩展,策略扩展等。 \n\n配置格式\n通常环境配置,用 properties 配置会比较方便,因为都是一些离散的简单值,用 key-value 配置可以减少配置的学习成本。 \n而描述配置,通常信息比较多,甚至有层次关系,用 xml 配置会比较方便,因为树结构的配置表现力更强。如果非常复杂,也可以考自定义 DSL 做为配置。有时候这类配置也可以用 Annotation 代替, 因为这些配置和业务逻辑相关,放在代码里也是合理的。 \n另外扩展配置,可能不尽相同。如果只是策略接口实现类替换,可以考虑 properties 等结构。如果有复杂的生命周期管理,可能需要 XML 等配置。有时候扩展会通过注册接口的方式提供。 \n配置加载\n对于环境配置,在 java 世界里,比较常规的做法,是在 classpath 下约定一个以项目为名称的 properties 配置,比如:log4j.properties,velocity.properties等。产品在初始化时,自动从 classpath 下加载该配置。我们平台的很多项目也使用类似策略,如:dubbo.properties,comsat.xml 等。这样有它的优势,就是基于约定,简化了用户对配置加载过程的干预。但同样有它的缺点,当 classpath 存在同样的配置时,可能误加载,以及在 ClassLoader 隔离时,可能找不到配置,并且,当用户希望将配置放到统一的目录时,不太方便。 \nDubbo 新版本去掉了 dubbo.properties,因为该约定经常造成配置冲突。 \n而对于描述配置,因为要参与业务逻辑,通常会嵌到应用的生命周期管理中。现在使用 spring 的项目越来越多,直接使用 spring 配置的比较普遍,而且 spring 允许自定义 schema,配置简化后很方便。当然,也有它的缺点,就是强依赖 spring,可以提编程接口做了配套方案。 \n在 Dubbo 即存在描述配置,也有环境配置。一部分用 spring 的 schame 配置加载,一部分从 classpath 扫描 properties 配置加载。用户感觉非常不便,所以在新版本中进行了合并,统一放到 spring 的 schame 配置加载,也增加了配置的灵活性。 \n扩展配置,通常对配置的聚合要求比较高。因为产品需要发现第三方实现,将其加入产品内部。在 java 世界里,通常是约定在每个 jar 包下放一个指定文件加载,比如:eclipse 的 plugin.xml,struts2 的 struts-plugin.xml 等,这类配置可以考虑 java 标准的服务发现机制,即在 jar 包的 META-INF/services 下放置接口类全名文件,内容为每行一个实现类类名,就像 jdk 中的加密算法扩展,脚本引擎扩展,新的 JDBC 驱动等,都是采用这种方式。参见:ServiceProvider 规范。\nDubbo 旧版本通过约定在每个 jar 包下,放置名为 dubbo-context.xml 的 spring 配置进行扩展与集成,新版本改成用 jdk 自带的 META-INF/services 方式,去掉过多的 spring 依赖。 \n可编程配置\n配置的可编程性是非常必要的,不管你以何种方式加载配置文件,都应该提供一个编程的配置方式,允许用户不使用配置文件,直接用代码完成配置过程。因为一个产品,尤其是组件类产品,通常需要和其它产品协作使用,当用户集成你的产品时,可能需要适配配置方式。 \nDubbo 新版本提供了与 xml 配置一对一的配置类,如:ServiceConfig 对应 ,并且属性也一对一,这样有利于文件配置与编程配置的一致性理解,减少学习成本。 \n配置缺省值\n配置的缺省值,通常是设置一个常规环境的合理值,这样可以减少用户的配置量。通常建议以线上环境为参考值,开发环境可以通过修改配置适应。缺省值的设置,最好在最外层的配置加载就做处理。程序底层如果发现配置不正确,就应该直接报错,容错在最外层做。如果在程序底层使用时,发现配置值不合理,就填一个缺省值,很容易掩盖表面问题,而引发更深层次的问题。并且配置的中间传递层,很可能并不知道底层使用了一个缺省值,一些中间的检测条件就可能失效。Dubbo 就出现过这样的问题,中间层用“地址”做为缓存 Key, 而底层,给“地址”加了一个缺省端口号,导致不加端口号的“地址”和加了缺省端口的“地址”并没有使用相同的缓存。 \n配置一致性\n配置总会隐含一些风格或潜规则,应尽可能保持其一致性。比如:很多功能都有开关,然后有一个配置值: \n\n是否使用注册中心,注册中心地址。 \n是否允许重试,重试次数。 \n\n你可以约定:\n\n每个都是先配置一个 boolean 类型的开关,再配置一个值。 \n用一个无效值代表关闭,N/A地址,0重试次数等。 \n\n不管选哪种方式,所有配置项,都应保持同一风格,Dubbo 选的是第二种。相似的还有,超时时间,重试时间,定时器间隔时间。如果一个单位是秒,另一个单位是毫秒(C3P0的配置项就是这样),配置人员会疯掉。 \n配置覆盖\n提供配置时,要同时考虑开发人员,测试人员,配管人员,系统管理员。测试人员是不能修改代码的,而测试的环境很可能较为复杂,需要为测试人员留一些“后门”,可以在外围修改配置项。就像 spring 的 PropertyPlaceholderConfigurer 配置,支持 SYSTEM_PROPERTIES_MODE_OVERRIDE,可以通过 JVM 的 -D 参数,或者像 hosts 一样约定一个覆盖配置文件,在程序外部,修改部分配置,便于测试。\nDubbo 支持通过 JVM 参数 -Dcom.xxx.XxxService=dubbo://10.1.1.1:1234 直接使远程服务调用绕过注册中心,进行点对点测试。还有一种情况,开发人员增加配置时,都会按线上的部署情况做配置,如: 因为线上只有一个注册中心,这样的配置是没有问题的,而测试环境可能有两个注册中心,测试人员不可能去修改配置,改为: \n, \n,所以这个地方,Dubbo 支持在 ${dubbo.registry.address} 的值中,通过竖号分隔多个注册中心地址,用于表示多注册中心地址。 \n配置继承\n配置也存在“重复代码”,也存在“泛化与精化”的问题。比如:Dubbo 的超时时间设置,每个服务,每个方法,都应该可以设置超时时间。但很多服务不关心超时,如果要求每个方法都配置,是不现实的。所以 Dubbo 采用了方法超时继承服务超时,服务超时再继承缺省超时,没配置时,一层层向上查找。 \n另外,Dubbo 旧版本所有的超时时间,重试次数,负载均衡策略等都只能在服务消费方配置。但实际使用过程中发现,服务提供方比消费方更清楚,但这些配置项是在消费方执行时才用到的。新版本,就加入了在服务提供方也能配这些参数,通过注册中心传递到消费方, \n做为参考值,如果消费方没有配置,就以提供方的配置为准,相当于消费方继承了提供方的建议配置值。而注册中心在传递配置时,也可以在中途修改配置,这样就达到了治理的目的,继承关系相当于:服务消费者 --> 注册中心 --> 服务提供者 \n\n配置向后兼容\n向前兼容很好办,你只要保证配置只增不减,就基本上能保证向前兼容。但向后兼容,也是要注意的,要为后续加入新的配置项做好准备。如果配置出现一个特殊配置,就应该为这个“特殊”情况约定一个兼容规则,因为这个特殊情况,很有可能在以后还会发生。比如:有一个配置文件是保存“服务=地址”映射关系的,其中有一行特殊,保存的是“注册中心=地址”。现在程序加载时,约定“注册中心”这个Key是特殊的,做特别处理,其它的都是“服务”。然而,新版本发现,要加一项“监控中心=地址”,这时,旧版本的程序会把“监控中心”做为“服务”处理,因为旧代码是不能改的,兼容性就很会很麻烦。如果先前约定“特殊标识+XXX”为特殊处理,后续就会方便很多。 \n向后兼容性,可以多向HTML5学习,参见:HTML5设计原理\n"},"principals/robustness.html":{"url":"principals/robustness.html","title":"8.5 设计实现的健壮性","keywords":"","body":"设计实现的健壮性\n\nhttp://oldratlee.com/380/tech/java/robustness-of-implement.html\n\nDubbo 作为远程服务暴露、调用和治理的解决方案,是应用运转的经络,其本身实现健壮性的重要程度是不言而喻的。\n这里列出一些 Dubbo 用到的原则和方法。\n日志\n日志是发现问题、查看问题一个最常用的手段。日志质量往往被忽视,没有日志使用上的明确约定。重视 Log 的使用,提高 Log 的信息浓度。日志过多、过于混乱,会导致有用的信息被淹没。\n要有效利用这个工具要注意:\n严格约定WARN、ERROR级别记录的内容\n\nWARN 表示可以恢复的问题,无需人工介入。\nERROR 表示需要人工介入问题。\n\n有了这样的约定,监管系统发现日志文件的中出现 ERROR 字串就报警,又尽量减少了发生。过多的报警会让人疲倦,使人对报警失去警惕性,使 ERROR 日志失去意义。再辅以人工定期查看 WARN 级别信息,以评估系统的“亚健康”程度。\n日志中,尽量多的收集关键信息\n哪些是关键信息呢?\n\n出问题时的现场信息,即排查问题要用到的信息。如服务调用失败时,要给出使用 Dubbo 的版本、服务提供者的 IP、使用的是哪个注册中心;调用的是哪个服务、哪个方法等等。这些信息如果不给出,那么事后人工收集的,问题过后现场可能已经不能复原,加大排查问题的难度。\n如果可能,给出问题的原因和解决方法。这让维护和问题解决变得简单,而不是寻求精通者(往往是实现者)的帮助。\n\n同一个或是一类问题不要重复记录多次\n同一个或是一类异常日志连续出现几十遍的情况,还是常常能看到的。人眼很容易漏掉淹没在其中不一样的重要日志信息。要尽量避免这种情况。在可以预见会出现的情况,有必要加一些逻辑来避免。\n如为一个问题准备一个标志,出问题后打日志后设置标志,避免重复打日志。问题恢复后清除标志。\n虽然有点麻烦,但是这样做保证日志信息浓度,让监控更有效。\n界限设置\n资源是有限的,CPU、内存、IO 等等。不要因为外部的请求、数据不受限的而崩溃。\n线程池(ExectorService)的大小和饱和策略\nServer 端用于处理请求的 ExectorService 设置上限。ExecutorService 的任务等待队列使用有限队列,避免资源耗尽。当任务等待队列饱和时,选择一个合适的饱和策略。这样保证平滑劣化。\n在 Dubbo 中,饱和策略是丢弃数据,等待结果也只是请求的超时。\n达到饱和时,说明已经达到服务提供方的负荷上限,要在饱和策略的操作中日志记录这个问题,以发出监控警报。记得注意不要重复多次记录哦。(注意,缺省的饱和策略不会有这些附加的操作。)根据警报的频率,已经决定扩容调整等等,避免系统问题被忽略。\n集合容量\n如果确保进入集合的元素是可控的且是足够少,则可以放心使用。这是大部分的情况。如果不能保证,则使用有有界的集合。当到达界限时,选择一个合适的丢弃策略。\n容错-重试-恢复\n高可用组件要容忍其依赖组件的失败。\nDubbo 的服务注册中心\n目前服务注册中心使用了数据库来保存服务提供者和消费者的信息。注册中心集群不同注册中心也通过数据库来之间同步数据,以感知其它注册中心上提供者。注册中心会内存中保证一份提供者和消费者数据,数据库不可用时,注册中心独立对外正常运转,只是拿不到其它注册中心的数据。当数据库恢复时,重试逻辑会内存中修改的数据写回数据库,并拿到数据库中新数据。\n服务的消费者\n服务消息者从注册中心拿到提供者列表后,会保存提供者列表到内存和磁盘文件中。这样注册中心宕后消费者可以正常运转,甚至可以在注册中心宕机过程中重启消费者。消费者启动时,发现注册中心不可用,会读取保存在磁盘文件中提供者列表。重试逻辑保证注册中心恢复后,更新信息。\n重试延迟策略\n上一点的子问题。Dubbo 中碰到有两个相关的场景。\n数据库上的活锁\n注册中心会定时更新数据库一条记录的时间戳,这样集群中其它的注册中心感知它是存活。过期注册中心和它的相关数据 会被清除。数据库正常时,这个机制运行良好。但是数据库负荷高时,其上的每个操作都会很慢。这就出现:\nA 注册中心认为 B 过期,删除 B 的数据。 B 发现自己的数据没有了,重新写入自己的数据的反复操作。这些反复的操作又加重了数据库的负荷,恶化问题。\n可以使用下面逻辑:\n当 B 发现自己数据被删除时(写入失败),选择等待这段时间再重试。重试时间可以选择指数级增长,如第一次等 1 分钟,第二次 10 分钟、第三次 100 分钟。\n这样操作减少后,保证数据库可以冷却(Cool Down)下来。\nClient 重连注册中心\n当一个注册中心停机时,其它的 Client 会同时接收事件,而去重连另一个注册中心。Client 数量相对比较多,会对注册中心造成冲击。避免方法可以是 Client 重连时随机延时 3 分钟,把重连分散开。\n"},"principals/dummy.html":{"url":"principals/dummy.html","title":"8.6 防痴呆设计","keywords":"","body":"防痴呆设计\n\nhttp://javatar.iteye.com/blog/804187\n\n最近有点痴呆,因为解决了太多的痴呆问题。服务框架实施面超来超广,已有 50 多个项目在使用,每天都要去帮应用查问题,来来回回,发现大部分都是配置错误,或者重复的文件或类,或者网络不通等,所以准备在新版本中加入防痴呆设计。估且这么叫吧,可能很简单,但对排错速度还是有点帮助,希望能抛砖引玉,也希望大家多给力,想出更多的防范措施共享出来。\n检查重复的jar包\n最痴呆的问题,就是有多个版本的相同jar包,会出现新版本的 A 类,调用了旧版本的 B 类,而且和JVM加载顺序有关,问题带有偶然性,误导性,遇到这种莫名其妙的问题,最头疼,所以,第一条,先把它防住,在每个 jar 包中挑一个一定会加载的类,加上重复类检查,给个示例:\nstatic {  \n    Duplicate.checkDuplicate(Xxx.class);  \n}\n\n检查重复工具类:\npublic final class Duplicate {  \n\n    private Duplicate() {}  \n\n    public static void checkDuplicate(Class cls) {  \n        checkDuplicate(cls.getName().replace('.', '/') + \".class\");  \n    }  \n\n    public static void checkDuplicate(String path) {  \n        try {  \n            // 在ClassPath搜文件  \n            Enumeration urls = Thread.currentThread().getContextClassLoader().getResources(path);  \n            Set files = new HashSet();  \n            while (urls.hasMoreElements()) {  \n                URL url = urls.nextElement();  \n                if (url != null) {  \n                    String file = url.getFile();  \n                    if (file != null &amp;&amp; file.length() &gt; 0) {  \n                        files.add(file);  \n                    }  \n                }  \n            }  \n            // 如果有多个,就表示重复  \n            if (files.size() &gt; 1) {  \n                logger.error(\"Duplicate class \" + path + \" in \" + files.size() + \" jar \" + files);  \n            }  \n        } catch (Throwable e) { // 防御性容错  \n            logger.error(e.getMessage(), e);  \n        }  \n    }  \n\n}\n\n检查重复的配置文件\n配置文件加载错,也是经常碰到的问题。用户通常会和你说:“我配置的很正确啊,不信我发给你看下,但就是报错”。然后查一圈下来,原来他发过来的配置根本没加载,平台很多产品都会在 classpath 下放一个约定的配置,如果项目中有多个,通常会取JVM加载的第一个,为了不被这么低级的问题折腾,和上面的重复jar包一样,在配置加载的地方,加上:\nDuplicate.checkDuplicate(\"xxx.properties\");\n\n检查所有可选配置\n必填配置估计大家都会检查,因为没有的话,根本没法运行。但对一些可选参数,也应该做一些检查,比如:服务框架允许通过注册中心关联服务消费者和服务提供者,也允许直接配置服务提供者地址点对点直连,这时候,注册中心地址是可选的,但如果没有配点对点直连配置,注册中心地址就一定要配,这时候也要做相应检查。\n异常信息给出解决方案\n在给应用排错时,最怕的就是那种只有简单的一句错误描述,啥信息都没有的异常信息。比如上次碰到一个 Failed to get session 异常,就这几个单词,啥都没有,哪个 session 出错? 什么原因 Failed? 看了都快疯掉,因是线上环境不好调试,而且有些场景不是每次都能重现。异常最基本要带有上下文信息,包括操作者,操作目标,原因等,最好的异常信息,应给出解决方案,比如上面可以给出:\"从 10.20.16.3 到 10.20.130.20:20880 之间的网络不通,请在 10.20.16.3 使用 telnet 10.20.130.20 20880 测试一下网络,如果是跨机房调用,可能是防火墙阻挡,请联系 SA 开通访问权限\" 等等,上面甚至可以根据 IP 段判断是不是跨机房。另外一个例子,是 spring-web 的 context 加载,如果在 getBean 时 spring 没有被启动,spring 会报一个错,错误信息写着:请在 web.xml 中加入: ......,多好的同学,看到错误的人复制一下就完事了,我们该学学。可以把常见的错误故意犯一遍,看看错误信息能否自我搞定问题, \n或者把平时支持应用时遇到的问题及解决办法都写到异常信息里。 \n日志信息包含环境信息\n每次应用一出错,应用的开发或测试就会把出错信息发过来,询问原因,这时候我都会问一大堆套话,用的哪个版本呀?是生产环境还是开发测试环境?哪个注册中心呀?哪个项目中的?哪台机器呀?哪个服务? 累啊,最主要的是,有些开发或测试人员根本分不清,没办法,只好提供上门服务,浪费的时间可不是浮云,所以,日志中最好把需要的环境信息一并打进去,最好给日志输出做个包装,统一处理掉,免得忘了。包装Logger接口如: \npublic void error(String msg, Throwable e) {  \n    delegate.error(msg + \" on server \" + InetAddress.getLocalHost() + \" using version \" + Version.getVersion(), e);  \n}\n\n获取版本号工具类:\npublic final class Version {  \n\n    private Version() {}  \n\n    private static final Logger logger = LoggerFactory.getLogger(Version.class);  \n\n    private static final Pattern VERSION_PATTERN = Pattern.compile(\"([0-9][0-9\\\\.\\\\-]*)\\\\.jar\");  \n\n    private static final String VERSION = getVersion(Version.class, \"2.0.0\");  \n\n    public static String getVersion(){  \n        return VERSION;  \n    }  \n\n    public static String getVersion(Class cls, String defaultVersion) {  \n        try {  \n            // 首先查找MANIFEST.MF规范中的版本号  \n            String version = cls.getPackage().getImplementationVersion();  \n            if (version == null || version.length() == 0) {  \n                version = cls.getPackage().getSpecificationVersion();  \n            }  \n            if (version == null || version.length() == 0) {  \n                // 如果MANIFEST.MF规范中没有版本号,基于jar包名获取版本号  \n                String file = cls.getProtectionDomain().getCodeSource().getLocation().getFile();  \n                if (file != null &amp;&amp; file.length() &gt; 0 &amp;&amp; file.endsWith(\".jar\")) {  \n                    Matcher matcher = VERSION_PATTERN.matcher(file);  \n                    while (matcher.find() &amp;&amp; matcher.groupCount() &gt; 0) {  \n                        version = matcher.group(1);  \n                    }  \n                }  \n            }  \n            // 返回版本号,如果为空返回缺省版本号  \n            return version == null || version.length() == 0 ? defaultVersion : version;  \n        } catch (Throwable e) { // 防御性容错  \n            // 忽略异常,返回缺省版本号  \n            logger.error(e.getMessage(), e);  \n            return defaultVersion;  \n        }  \n    }  \n\n}\n\nkill 之前先 dump\n每次线上环境一出问题,大家就慌了,通常最直接的办法回滚重启,以减少故障时间,这样现场就被破坏了,要想事后查问题就麻烦了,有些问题必须在线上的大压力下才会发生,线下测试环境很难重现,不太可能让开发或 Appops 在重启前,先手工将出错现场所有数据备份一下,所以最好在 kill 脚本之前调用 dump,进行自动备份,这样就不会有人为疏忽。dump脚本示例:\nJAVA_HOME=/usr/java  \nOUTPUT_HOME=~/output  \nDEPLOY_HOME=`dirname $0`  \nHOST_NAME=`hostname`  \n\nDUMP_PIDS=`ps  --no-heading -C java -f --width 1000 | grep \"$DEPLOY_HOME\" |awk '{print $2}'`  \nif [ -z \"$DUMP_PIDS\" ]; then  \n    echo \"The server $HOST_NAME is not started!\"  \n    exit 1;  \nfi  \n\nDUMP_ROOT=$OUTPUT_HOME/dump  \nif [ ! -d $DUMP_ROOT ]; then  \n    mkdir $DUMP_ROOT  \nfi  \n\nDUMP_DATE=`date +%Y%m%d%H%M%S`  \nDUMP_DIR=$DUMP_ROOT/dump-$DUMP_DATE  \nif [ ! -d $DUMP_DIR ]; then  \n    mkdir $DUMP_DIR  \nfi  \n\necho -e \"Dumping the server $HOST_NAME ...\\c\"  \nfor PID in $DUMP_PIDS ; do  \n    $JAVA_HOME/bin/jstack $PID > $DUMP_DIR/jstack-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jinfo $PID > $DUMP_DIR/jinfo-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jmap $PID > $DUMP_DIR/jmap-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jmap -heap $PID > $DUMP_DIR/jmap-heap-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jmap -histo $PID > $DUMP_DIR/jmap-histo-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    if [ -r /usr/sbin/lsof ]; then  \n    /usr/sbin/lsof -p $PID > $DUMP_DIR/lsof-$PID.dump  \n    echo -e \".\\c\"  \n    fi  \ndone  \nif [ -r /usr/bin/sar ]; then  \n/usr/bin/sar > $DUMP_DIR/sar.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/uptime ]; then  \n/usr/bin/uptime > $DUMP_DIR/uptime.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/free ]; then  \n/usr/bin/free -t > $DUMP_DIR/free.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/vmstat ]; then  \n/usr/bin/vmstat > $DUMP_DIR/vmstat.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/mpstat ]; then  \n/usr/bin/mpstat > $DUMP_DIR/mpstat.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/iostat ]; then  \n/usr/bin/iostat > $DUMP_DIR/iostat.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /bin/netstat ]; then  \n/bin/netstat > $DUMP_DIR/netstat.dump  \necho -e \".\\c\"  \nfi  \necho \"OK!\"\n\n"},"principals/extension.html":{"url":"principals/extension.html","title":"8.7 扩展点重构","keywords":"","body":"扩展点重构\n\nhttp://javatar.iteye.com/blog/1041832\n\n随着服务化的推广,网站对Dubbo服务框架的需求逐渐增多,Dubbo 的现有开发人员能实现的需求有限,很多需求都被 delay,而网站的同学也希望参与进来,加上领域的推动,所以平台计划将部分项目对公司内部开放,让大家一起来实现,Dubbo 为试点项目之一。 \n既然要开放,那 Dubbo 就要留一些扩展点,让参与者尽量黑盒扩展,而不是白盒的修改代码,否则分支,质量,合并,冲突都会很难管理。 \n先看一下 Dubbo 现有的设计:\n\n这里面虽然有部分扩展接口,但并不能很好的协作,而且扩展点的加载和配置都没有统一处理,所以下面对它进行重构。\n第一步,微核心,插件式,平等对待第三方\n即然要扩展,扩展点的加载方式,首先要统一,微核心+插件式,是比较能达到 OCP 原则的思路。\n由一个插件生命周期管理容器,构成微核心,核心不包括任何功能,这样可以确保所有功能都能被替换,并且,框架作者能做到的功能,扩展者也一定要能做到,以保证平等对待第三方,所以,框架自身的功能也要用插件的方式实现,不能有任何硬编码。 \n通常微核心都会采用 Factory、IoC、OSGi 等方式管理插件生命周期。考虑 Dubbo 的适用面,不想强依赖 Spring 等 IoC 容器。自已造一个小的 IoC 容器,也觉得有点过度设计,所以打算采用最简单的 Factory 方式管理插件。 \n最终决定采用的是 JDK 标准的 SPI 扩展机制,参见:java.util.ServiceLoader,也就是扩展者在 jar 包的 META-INF/services/ 目录下放置与接口同名的文本文件,内容为接口实现类名,多个实现类名用换行符分隔。比如,需要扩展 Dubbo 的协议,只需在 xxx.jar 中放置文件:META-INF/services/com.alibaba.dubbo.rpc.Protocol,内容为 com.alibaba.xxx.XxxProtocol。Dubbo 通过 ServiceLoader 扫描到所有 Protocol 实现。 \n并约定所有插件,都必须标注:@Extension(\"name\"),作为加载后的标识性名称,用于配置选择。\n第二步,每个扩展点只封装一个变化因子,最大化复用\n每个扩展点的实现者,往往都只是关心一件事,现在的扩展点,并没有完全分离。比如:Failover, Route, LoadBalance, Directory 没有完全分开,全由 RoutingInvokerGroup 写死了。 \n再比如,协议扩展,扩展者可能只是想替换序列化方式,或者只替换传输方式,并且 Remoting 和 Http 也能复用序列化等实现。这样,需为传输方式,客户端实现,服务器端实现,协议头解析,数据序列化,都留出不同扩展点。 \n拆分后,设计如下:\n\n第三步,全管道式设计,框架自身逻辑,均使用截面拦截实现\n现在很多的逻辑,都是放在基类中实现,然后通过模板方法回调子类的实现,包括:local, mock, generic, echo, token, accesslog, monitor, count, limit 等等,可以全部拆分使用 Filter 实现,每个功能都是调用链上的一环。 比如:(基类模板方法) \npublic abstract AbstractInvoker implements Invoker {  \n\n    public Result invoke(Invocation inv) throws RpcException {  \n        // 伪代码  \n        active ++;  \n        if (active > max)  \n            wait();  \n\n        doInvoke(inv);  \n\n        active --;  \n        notify();  \n    }  \n\n    protected abstract Result doInvoke(Invocation inv) throws RpcException  \n\n}\n\n改成:(链式过滤器)\npublic abstract LimitFilter implements Filter {  \n\n    public Result invoke(Invoker chain, Invocation inv) throws RpcException {  \n         // 伪代码  \n        active ++;  \n        if (active > max)  \n            wait();  \n\n        chain.invoke(inv);  \n\n        active --;  \n        notify();  \n    }  \n\n}\n\n第四步,最少概念,一致性概念模型\n保持尽可能少的概念,有助于理解,对于开放的系统尤其重要。另外,各接口都使用一致的概念模型,能相互指引,并减少模型转换, \n比如,Invoker 的方法签名为: \nResult invoke(Invocation invocation) throws RpcException;\n\n而 Exporter 的方法签名为: \nObject invoke(Method method, Object[] args) throws Throwable;\n\n但它们的作用是一样的,只是一个在客户端,一个在服务器端,却采用了不一样的模型类。\n再比如,URL 以字符串传递,不停的解析和拼装,没有一个 URL 模型类, 而 URL 的参数,却时而 Map, 时而 Parameters 类包装,\nexport(String url)  \ncreateExporter(String host, int port, Parameters params);\n\n使用一致模型:\nexport(URL url)  \ncreateExporter(URL url);\n\n再比如,现有的:Invoker, Exporter, InvocationHandler, FilterChain \n 其实都是 invoke 行为的不同阶段,完全可以抽象掉,统一为 Invoker,减少概念。 \n第五步,分层,组合式扩展,而不是泛化式扩展\n原因参见:谈谈扩充式扩展与增量式扩展。\n泛化式扩展指:将扩展点逐渐抽象,取所有功能并集,新加功能总是套入并扩充旧功能的概念。 \n组合式扩展指:将扩展点正交分解,取所有功能交集,新加功能总是基于旧功能之上实现。 \n上面的设计,不自觉的就将 Dubbo 现有功能都当成了核心功能。上面的概念包含了 Dubbo 现有 RPC 的所有功能,包括:Proxy, Router, Failover, LoadBalance, Subscriber, Publisher, Invoker, Exporter, Filter 等, \n但这些都是核心吗?踢掉哪些,RPC 一样可以 Run?而哪些又是不能踢掉的?基于这样考虑,可以将 RPC 分解成两个层次,只是 Protocol 和 Invoker 才是 RPC 的核心。其它,包括 Router, Failover, Loadbalance, Subscriber, Publisher 都不核心,而是 Routing。所以,将 Routing 作为 Rpc 核心的一个扩展,设计如下:\n\n第六步,整理,梳理关系\n整理后,设计如下:\n\n"},"release.html":{"url":"release.html","title":"9 版本管理","keywords":"","body":"版本管理\n新功能的开发 和 稳定性的提高 对产品都很重要。但是添加新功能会影响稳定性,Dubbo 使用如下的版本开发模式来保障两者。\n2 个版本并行开发\n\nBugFix 版本:低版本,比如 2.4.x。是 GA 版本,线上使用的版本,只会 BugFix,升级第三位版本号。\n新功能版本:高版本,比如 2.5.x。加新功能的版本,会给对新功能有需求的应用试用。\n\n2.5.x 的新功能基本稳定后,进入 2.5.x 试用阶段。找足够多的应用试用 2.5.x 版本。\n在 2.5.x 够稳定后:\n\n2.5.x 成为 GA 版本,只 BugFix,推广使用此版本。如何可行,可以推进应用在期望的时间点内升级到 GA 版本。\n2.4.x 不再开发,应用碰到 Bug 让直接升级。(这个称为“夕阳条款”)\n从 2.5.x 拉成分支 2.6.0,作为新功能开发版本。\n\n优势\n\n保持 GA 版本是稳定的!因为:\n只会作 BugFix\n成为 GA 版本前有试用阶段\n\n\n新功能可以高版本中快速响应,并让应用能试用新功能。\n不会版本过多,导致开发和维护成本剧增\n\n用户要配合的职责\n由于开发只会 BugFix GA 版本,所以用户需要积极跟进升级到 GA 版本,以 Fix 发现的问题。\n定期升级版本用户带来了不安。这是一个假命题,说明如下:\n\nGA 经过一个试用阶段保持稳定。\nGA 版本有 Bug 会火速 Fix\n相对出问题才升级到 GA 版本(可以跨了多个版本)定期升级平摊风险(类似小步快跑)。经历过周期长的大项目的同学会有这样的经历,三方库版本长时间不升级,结果出了问题不得不升级到新版本(跨了多个版本)风险巨大。\n\n"},"contribution.html":{"url":"contribution.html","title":"10 贡献","keywords":"","body":"贡献\n流程\n\n如果是扩展功能,直接新增工程,黑盒依赖 Dubbo 进行扩展。\n如果是改 BUG,或修改框架本身,可以从 Dubb 的 GitHub 上 Fork 工程。\n修改后通过 Push Request 反馈修改。\n\n任务\n\n\n\n功能\n分类\n优先级\n状态\n认领者\n计划完成时间\n进度\n\n\n\n\n《用户指南》翻译\n文档\n高\n未认领\n待定\n待定\n0%\n\n\n《开发指南》翻译\n文档\n高\n未认领\n待定\n待定\n0%\n\n\n扩展点兼容性测试\n测试\n高\n已认领\n罗立树\n待定\n0%\n\n\n性能基准测试\n测试\n高\n未认领\n待定\n待定\n0%\n\n\n功能单元测试\n测试\n高\n未认领\n待定\n待定\n0%\n\n\nJTA/XA分布式事务\n拦截扩展\n高\n未认领\n待定\n待定\n0%\n\n\nThrift\n协议扩展\n高\n开发完成\n闾刚\n2012-04-27\n90%\n\n\nICE\n协议扩展\n高\n未认领\n待定\n待定\n0%\n\n\nACE\n协议扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJSON-RPC\n协议扩展\n低\n未认领\n待定\n待定\n0%\n\n\nXML-RPC\n协议扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJSR181&CXF(WebService)\n协议扩展\n高\n开发完成\n白文志\n2012-04-27\n90%\n\n\nJSR311&JSR339(RestfulWebService)\n协议扩展\n高\n未认领\n待定\n待定\n0%\n\n\nJMS&ActiveMQ\n协议扩展\n高\n未认领\n待定\n待定\n0%\n\n\nProtobuf\n序列化扩展\n高\n调研\n朱启恒\n2012-02-30\n20%\n\n\nAvro\n序列化扩展\n低\n未认领\n待定\n待定\n0%\n\n\nXSocket\n传输扩展\n低\n未认领\n待定\n待定\n0%\n\n\nCGLib\n动态代理扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJNDI\n注册中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nLDAP\n注册中心扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJSR140&SLP\n注册中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nUDDI\n注册中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nJMX\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nSNMP\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nCacti\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nNagios\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nLogstash\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nJRobin\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nMaven\n服务安装包仓库\n低\n未认领\n待定\n待定\n0%\n\n\nSubversion\n服务安装包仓库\n低\n未认领\n待定\n待定\n0%\n\n\nJCR/JSR283\n服务安装包仓库\n低\n未认领\n待定\n待定\n0%\n\n\nSimpleDeployer\n本地部署代理\n低\n未认领\n待定\n待定\n0%\n\n\nSimpleScheduler\n资源调度器\n低\n未认领\n待定\n待定\n0%\n\n\n\n"},"checklist.html":{"url":"checklist.html","title":"11 检查列表","keywords":"","body":"检查列表\n发布前 checklist\n\njira ticket 过一遍\nsvn change list\nticket 关联 code\ntest code\nfind bugs\n\n修复时 checklist\n\n修复代码前先建 ticket \n修复代码前先写测试用例\n需要伙伴检查\ntest code(正常流程/异常流程)\n讲一遍逻辑\n契约文档化\n以上内容都写到ticket的评论上\n代码注释写清楚,用中文无妨\n每个版本要有 owner,确保 scope 和 check\n\nPartner Check\n\nPartner 以用户的方式运行一下功能\nPartner 发现问题、添加测试(集成测试)复现总是;Owner 完成实现。(保证两方的时间投入 PatternerCheck 的给予时间保证)\nOwner 向 Partner 讲述一遍实现。\n\n"},"code-smell.html":{"url":"code-smell.html","title":"12 坏味道","keywords":"","body":"坏味道\n这里记录的是 Dubbo 设计或实现不优雅的地方。\nURL 转换\n1. 点对点暴露和引用服务\n直接暴露服务:\nEXPORT(dubbo://provider-address/com.xxx.XxxService?version=1.0.0\")\n点对点直连服务:\nREFER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n2. 通过注册中心暴露服务\n向注册中心暴露服务:\nEXPORT(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&export=ENCODE(dubbo://provider-address/com.xxx.XxxService?version=1.0.0))\n获取注册中心:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\n注册服务地址:\nurl.getParameterAndDecoded(\"export\"))\nREGISTER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n3. 通过注册中心引用服务\n从注册中心订阅服务:\nREFER(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&refer=ENCODE(version=1.0.0))\n获取注册中心:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\n订阅服务地址:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nSUBSCRIBE(dubbo://registry-address/com.xxx.XxxService?version=1.0.0)\n通知服务地址:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nNOTIFY(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n4. 注册中心推送路由规则\n注册中心路由规则推送:\nNOTIFY(route://registry-address/com.xxx.XxxService?router=script&type=js&rule=ENCODE(function{...}))\n获取路由器:\nurl.setProtocol(url.getParameter(\"router\", \"script\"))\nGETROUTE(script://registry-address/com.xxx.XxxService?type=js&rule=ENCODE(function{...}))\n5. 从文件加载路由规则\n从文件加载路由规则:\nGETROUTE(file://path/file.js?router=script)\n获取路由器:\nurl.setProtocol(url.getParameter(\"router\", \"script\")).addParameter(\"type\", SUFFIX(file)).addParameter(\"rule\", READ(file))\nGETROUTE(script://path/file.js?type=js&rule=ENCODE(function{...}))\n调用参数\n\npath 服务路径\ngroup 服务分组\nversion 服务版本\ndubbo 使用的 dubbo 版本\ntoken 验证令牌\ntimeout 调用超时\n\n扩展点的加载\n1. 自适应扩展点\nExtensionLoader 加载扩展点时,会检查扩展点的属性(通过set方法判断),如该属性是扩展点类型,则会注入扩展点对象。因为注入时不能确定使用哪个扩展点(在使用时确定),所以注入的是一个自适应扩展(一个代理)。自适应扩展点调用时,选取一个真正的扩展点,并代理到其上完成调用。Dubbo 是根据调用方法参数(上面有调用哪个扩展点的信息)来选取一个真正的扩展点。\n在 Dubbo 给定所有的扩展点上调用都有 URL 参数(整个扩展点网的上下文信息)。自适应扩展即是从 URL 确定要调用哪个扩展点实现。URL 哪个 Key 的 Value 用来确定使用哪个扩展点,这个信息通过的 @Adaptive 注解在方法上说明。\n@Extension\npublic interface Car {\n    @Adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\", \"http://10.20.160.198/wiki/display/dubbo/transport.type\"})\n    public run(URL url, Type1 arg1, Type2 arg2);\n}\n\n由于自适应扩展点的上面的约定,ExtensionLoader 会为扩展点自动生成自适应扩展点类(通过字节码),并将其实例注入。\nExtensionLoader 生成的自适应扩展点类如下:\npackage ;\n\npublic class $Adpative implements  {\n    public () {\n        if(是否有URL类型方法参数?) 使用该URL参数\n        else if(是否有方法类型上有URL属性) 使用该URL属性\n        # \n\n        if(获取的URL == null) {\n            throw new IllegalArgumentException(\"url == null\");\n        }\n\n        根据@Adaptive注解上声明的Key的顺序,从URL获致Value,作为实际扩展点名。\n        如URL没有Value,则使用缺省扩展点实现。如没有扩展点, throw new IllegalStateException(\"Fail to get extension\");\n\n        在扩展点实现调用该方法,并返回结果。\n    }\n\n    public () {\n        throw new UnsupportedOperationException(\"is not adaptive method!\");\n    }\n}\n\n@Adaptive 注解使用如下:\n如果 URL 这些 Key 都没有 Value,使用缺省的扩展(在接口的 Default 中设定的值)。比如,String[] {\"key1\", \"key2\"},表示先在 URL 上找 key1 的 Value 作为要 Adapt 成的 Extension 名;key1 没有 Value,则使用 key2 的 Value 作为要 Adapt 成的 Extension 名。 key2 没有 Value,使用缺省的扩展。如果没有设定缺省扩展,则方法调用会抛出 IllegalStateException。如果不设置则缺省使用 Extension 接口类名的点分隔小写字串。即对于 Extension 接口 com.alibaba.dubbo.xxx.YyyInvokerWrapper 的缺省值为 new String[] {\"yyy.invoker.wrapper\"}\nCallback 功能\n1. 参数回调\n主要原理: 在一个 consumer->provider 的长连接上,自动在 Consumer 端暴露一个服务(实现方法参数上声明的接口A),provider 端便可反向调用到 consumer 端的接口实例。\n实现细节:\n\n为了在传输时能够对回调接口实例进行转换,自动暴露与自动引用目前在 DubboCodec 中实现。此处需要考虑将此逻辑与 codec 逻辑分离。\n在根据 invocation 信息获取 exporter 时,需要判断是否是回调,如果是回调,会从 attachments 中取得回调服务实例的 id,在获取 exporter,此处用于 consumer 端可以对同一个 callback 接口做不同的实现。\n\n2. 事件通知\n主要原理:Consumer 在 invoke 方法时,判断如果有配置 onreturn/onerror... 则将 onreturn 对应的参数值(实例方法)加入到异步调用的回调列表中。\n实现细节:参数的传递采用 URL,但 URL 中没有支持 string-object,所以将实例方法存储在 staticMap 中,此处实现需要进行改造。\nLazy连接\nDubboProtocol 特有功能,默认关闭。\n当客户端与服务端创建代理时,暂不建立 tcp 长连接,当有数据请求时在做连接初始化。\n此项功能自动关闭连接重试功能,开启发送重试功能(即发送数据时如果连接已断开,尝试重新建立连接)\n共享连接\nDubboProtocol 特有功能,默认开启。\nJVM A 暴露了多个服务,JVM B 引用了 A 中的多个服务,共享连接是说 A 与 B 多个服务调用是通过同一个 TCP 长连接进行数据传输,已达到减少服务端连接数的目的.\n实现细节:对于同一个地址由于使用了共享连接,那 invoker 的 destroy 就需要特别注意,一方面要满足对同一个地址 refer 的 invoker 全部 destroy 后,连接需要关闭,另一方面还需要注意如何避免部分 invoker destroy 时不能关闭连接。在实现中采用了引用计数的方案,但为了防范,在连接关闭时,重新建立了一个 Lazy connection (称为幽灵连接), 用于当出现异常场景时,避免影响业务逻辑的正常调用.\nsticky 策略\n有多个服务提供者的情况下,配置了 sticky 后,在提供者可用的情况下,调用会继续发送到上一次的服务提供者。sticky 策略默认开启了连接的 lazy 选项, 用于避免开启无用的连接.\n服务提供者选择逻辑\n\n存在多个服务提供者的情况下,首先根据 Loadbalance 进行选择,如果选择的 provider 处于可用状态,则进行后续调用\n如果第一步选择的服务提供者不可用,则从剩余服务提供者列表中继续选择,如果可用,进行后续调用\n如果所有的服务提供者都不可用,重新遍历整个列表(优先从没有选过的列表中选择),判断是否有可用的服务提供者(选择过程中,不可用的服务提供者可能会恢复到可用状态),如果有,则进行后续调用\n如果第三步没有选择出可用的服务提供者,会选第一步选出的 invoker 中的下一个(如果不是最后一个),避免碰撞。\n\n"},"TCK.html":{"url":"TCK.html","title":"13 技术兼容性测试","keywords":"","body":"技术兼容性测试\nDubbo 的协议,通讯,序列化,注册中心,负载均策等扩展点,都有多种可选策略,以应对不同应用场景,而我们的测试用例很分散,当用户自己需要加一种新的实现时,总是不确定能否满足扩展点的完整契约。\n所以,我们需要对核心扩展点写 TCK (Technology Compatibility Kit),用户增加一种扩展实现,只需通过 TCK,即可确保与框架的其它部分兼容运行,可以有效提高整体健状性,也方便第三方扩展者接入,加速开源社区的成熟。\n开源社区的行知同学已着手研究这一块,他的初步想法是借鉴 JBoss 的 CDI-TCK,做一个 Dubbo 的 TCK 基础框架,在此之上实现 Dubbo 的扩展点 TCK 用例。\n参见:http://docs.jboss.org/cdi/tck/reference/1.0.1-Final/html/introduction.html\n如果大家有兴趣,也可以一起研究,和行知一块讨论。\nProtocol TCK\n\nTODO\n\nRegistry TCK\n\nTODO\n\n"}}}
\ No newline at end of file
+{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["dubbo","introduct","开发的人群。主要涵盖了","源码、设计有兴趣的,或者有意愿加入","的框架设计、扩展机制、编码规范、版本管理、构建等话题。","这篇文档的目标读者是对"],"build.html":["${home}/.m2/repository,","1","1.","1.5","1:","2","2.","2.2.1",">","build","c:\\document","classpath","clean","clone","declipse.workspace=/path/to/the/workspace/","dmaven.test.skip","dubbo","dubbo.git","dubbo/tag","eclips","eclipse:configur","eclipse:eclips","export","git","https://github.com/apache/incub","id","idea","idea:idea","instal","intellij","jar","java","m2_repo","master","maven","maven_opt","maven_opts=","mvn","path","prefer","settings\\.m2\\repositori","source:jar","unix","window","workspac","xmx1024m","xx:maxpermsize=512m","↩","上浏览源代码","下的路径是","中导入","中配置","也可以直接在","也可以通过以下的","仓库。","仓库。通过","代码签出","以上的版本","作为主干版本的开发,使用分支作为维护版本。可以通过","作为构建工具。","使用","使用以下命令做一次构建","使用以下命令来生成","分支","包","包,方便用来调试","变量指向本地的","可以通过以下的构建命令来跳过单元测试","命令配置:","在","定义","我们使用","或者以上的版本","支持","来查看所有版本的标签。","构建","构建之前需要配置以下的","构建源代码","源代码","源码构建","的","的工程","的源代码","要求","通过以下命令以构建","通过以下的这个命令签出最新的项目源码","首先,需要在"],"design.html":["+","2","api,其它各层均为","api,用户通过","channel,","client","client,","cluster","cluster,","codec","common","config","consum","consumer,","contain","container,","directory,","dubbo","exchang","exchangechannel,","exchangeclient,","exchanger,","exchangeserv","export","filter","grizzli","invoc","invocation,","invok","invoker,","invoker,也就是去掉","invoker,这样其它人只要关注","loadbal","main","messag","microkernel","mina","mina,","monitor","monitor,","monitorfactory,","monitorservic","netti","netty,","objectinput,","objectoutput,","plugin","plugin,dubbo","protocol","protocol,","provid","provider,","proxi","proxy,","proxyfactori","referenceconfig","registri","registry,","registryfactory,","registryservic","remot","request","request,","respons","result","rmi","rmi协议则不需要使用此包。","router,","rpc","run","serial","serialization,","server","server,","service,","serviceconfig,","serviceproxi","skeleton,","spi。","spring","standlon","statist","stub","threadpool","tomcat/jboss","transport","transporter,","ubbo,隐藏","udp","url","util","web","中。","中,protocol","为中心,只有到了暴露给用户使用时,才用","为中心,可以直接初始化配置类,也可以通过","为中心,扩展接口为","为服务容器,用于部署运行服务,没有在层中画出。","为统一接口,以","代表层或模块,蓝色的表示与业务有交互,绿色的表示只对","代表部署逻辑拓扑节点。","以","传输层和","传输,而","伪装成一个","作为配置信息的统一格式,所有扩展点都通过传递","使用d","依赖关系","信息交换层,transport","信息交换层:封装请求响应模式,同步转异步,以","公共逻辑模块:包括","关系说明","内部交互。","内部再划为","划分逻辑拓普节点,保持统一概念。","加载","协议的实现,如果","协议的实现,如果你选择","协议,整个","即可,加上","只负责组装","各层说明","启动,因为服务通常不需要","和","和服务器端","图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,servic","图中只包含","图中小方块","图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。","图中的","图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。","图中背景方块","图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。","图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。","图例说明:","在","在很多场景下都使用","基本设计原则","实现是","实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。","容器去加载服务。","容器模块:是一个","容器的特性,没必要用","容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。","对其它层都不会造成影响,因为只有一个提供者时,是不需要","对外的","将","就可以完成非透明的","层","层为","层只负责单向消息传输,是对","层和","层封装了所有接口的透明化代理,而在其它层都以","层放在","层是在传输层之上封装了","层都放在","展开总设计图右边服务消费方引用服务的蓝色初始化链,时序图如下:","展开总设计图左边服务提供方暴露服务的蓝色初始化链,时序图如下:","展开总设计图的红色调用链,如下:","引用服务时序","或者去掉","所有细节。","拦截点。","携带配置信息。","数据序列化层:可复用的一些工具,扩展接口为","整体上按照分层结构进行分包,与分层的不同点在于:","整体设计","整体都隐含在","是会话域,它持有调用过程中的变量,比如方法名,参数等。","是可以","是外围概念,所以","是实体域,它是","是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用","是服务域,它是","是核心层,也就是只要有","暴露和引用的主功能入口,它负责","暴露服务时序","更多设计原则参见:框架设计原则","服务代理层:服务接口透明代理,生成服务的客户端","框架设计","模块中,为","模块中,以便更大程度复用。","模块中,这两层是","模块分包","模块说明:","模式,microkernel","注册中心层:封装服务地址的注册与发现,以服务","注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。","用","的。","的主过程上","的原因是","的容器,以简单的","的层,remot","的层,不包含","的所有功能点都可被用户自定义扩展所替换。","的抽象,它也可以扩展","的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起","的核心领域模型中:","的核心,在不需要集群也就是只有一个提供者时,可以只使用这两层完成","的生命周期管理。","的目的是将多个","的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。","监控层:rpc","监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。","等","类和通用模型。","网络传输层:抽象","而","自身的功能也是通过扩展点实现的,也就是","解析配置生成配置类","语义。","调用。","调用次数和调用时间监控,以","调用的通讯基础。","调用链","调用,以","调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。","调用,然后在","路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以","转成接口,或将接口实现转成","远程调用层:封装","远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。","远程通讯模块:相当于","都不会用上,remot","配置层:对外配置接口,以","配置模块:是","采用","集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡,","领域模型"],"SPI.html":["\"provider\",","\"transport\"})","\"xxx\")","(servic","(造轮者)","...","...);","//","//...","1.","1,放置扩展点配置文件","2.","2:","3","=","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"server\",","adapt","aop","aop,即","bind()","bind(url","car","carmak","carmaker、wheelmak","carmaker(造车者)、wheelmak","channelhandl","class","classpath","client","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.protocol;","com.alibaba.xxx;","connect(url","dubbo","exportlistener,","extensionload","filter","getname()","handler)","impl","impl.refer();","impl;","implemenet","implement","import","inf/dubbo/com.alibaba.dubbo.rpc.protocol,内容为:","inf/dubbo/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔。","interfac","interface)","invokerlistener,","ioc","jar","jdk","jruby.jar","key","key,即可以代理真正的实现类上,可以动态生成。","key,如果该","makecar()","makecar();","makecar(url","makewheel","makewheel();","makewheel(url","meta","new","packag","protocol","protocol)","protocol;","provid","public","racecar","racecar(wheel,","racecarmak","refer()","remotingexception;","return","rubi","rubyscriptengin","ruby,而不是真正失败的原因。","scriptengine,通过","server","setter","setwheelmaker(wheelmak","spi","statuscheck","telnethandler,","this.wheelmak","throw","transport","url","url)","url);","url,","url.get(\"wheel.type\")","valu","value)传递配置信息。","void","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","wrapper","wrapper类内容:","xxx=com.alibaba.xxx.xxxprotocol","xxxfilter","xxxprotocol","xxxprotocol(protocol","xxxprotocolwrapp","{","}","↩","一些操作","下面是","不存在,导致","不是扩展点的真正实现。它的用途主要是用于从","中","中。新加的","中说明。","中返回的实际上是","也是扩展点则会注入","代理了扩展点。","以扩展","会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。","会全","会执行扩展点的拼装操作。","使用","值,来决定代理到哪个实际扩展点。","加载","加载扩展点时,自动注入依赖的扩展点。加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,extensionload","包内","包内同名的这个文件,然后进行合并","包内放置文本文件:meta","包内,dubbo","包内,不是","即","只对提供方激活,group可选\"provider\"或\"consumer\"","和","因为所依赖的","在","在会自动注入依赖的扩展点。extensionload","在加载扩展点时,如果加载到的扩展点有拷贝构造函数,则判定为扩展点","在所有的扩展点上添加了逻辑,有些类似","在扩展类的","增加了对扩展点","如果扩展点加载失败,连扩展点的名称都拿不到了。比如:jdk","实例可以提取约定","实例的逻辑是固定,指定提取的","实例,直到扩展点方法执行时才决定调用是一个扩展点实现。","实现。adapt","实现先查找","实现是在加载扩展点里动态生成。指定提取的","实现来调用对应实现的真正的","实现类内容","对于","对于集合类扩展点,比如:filter,","对应不起来,当用户执行","对象(包含了key","当上面执行","当配置了xxx参数,并且参数为有效值时激活,比如配了cache=\"lru\",自动激活cachefilter。","或:","扩展点加载","扩展点发现机制加强而来。","扩展点方法调用会有url参数(或是参数有url成员)","扩展点特性","扩展点的","扩展点的代码:","扩展点自动包装","扩展点自动激活","扩展点自动装配","扩展点自适应","扩展点配置","扫描所有","持有了实际的扩展点实现类。","接口方法做一个操作后,再调用extension的方法","接口类如下:","改进了","方法。如提取","方法来判定其成员。即","方法的","方法,adapt","无条件自动激活","时,setwheelmak","时,注入的","本身的","来决定","来决定使用哪个","来源:","标准的","没有值则找","注入其它扩展点。","注入的依赖扩展点是一个","注意:扩展点使用单一实例加载(请确保扩展实现的线程安全性),缓存在","注意:这里的配置文件是放在你自己的","注解在接口方法上提供。","的","的一个实现类:","的以下问题:","的协议为例,在协议的实现","的实现。","的实现中要注入哪个。","的扩展点加载从","的扩展点实现","的扩展点类对应的","的支持,一个扩展点可以直接","示例:","示例:有两个为扩展点","等,可以同时加载多个实现,此时,可以用自动激活来简化配置,如:","类。","类。extensionload","类加载失败,这个失败原因被吃掉了,和","类可以把所有扩展点公共逻辑移至","类可以有多个,也可以根据需要新增。","类同样实现了扩展点接口,但是","类的实例,wrapper","约定:","脚本时,会报不支持","自动包装扩展点的","获取脚本类型的名称,但如果","要注入依赖扩展点时,如何决定要注入依赖扩展点的哪个实现。在这个示例中,即是在多个wheelmak","返回扩展点时,包装在真正的扩展点实现外。即从","这个问题在下面一点","这样依赖的扩展点也可以从url拿到配置信息,所有的扩展点自己定好配置的key后,配置信息从url上从最外层传入。url在配置传递上即是一条总线。","这里带来另一个问题,extensionload","通过","通过扫描扩展点实现类的所有","配置模块中的配置","配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。比如:"],"implementation.html":["\"","\"hello","+","1.","1,serviceconfig","2.","2,serviceconfig","3.","3,referenceconfig","4","4.","4,referenceconfig","5.","5,而该","=","abstractproxyinvok","all,","bean","cach","class","cluster","connect","democlientact","demoservic","demoservice)","demoservice.sayhello(\"world\"","demoservice;","demoserviceimpl","direct,","dispather:","dubbo","dubbo.jar","dubbo://","dubbo://servic","dubbobeandefinitionpars","dubboinvoker、","dubbonamespacehandler。","dubboprotocol","dubboprotocol的","execution,","export","export()","exporterlisten","filter","fixed,","getinvok","hello","hessianrpcinvoker、","host/com.alibaba.dubbo.registry.registryservice?export=url.encode(\"dubbo://servic","host/com.alibaba.dubbo.registry.registryservice?refer=url.encode(\"consumer://consum","host/com.foo.fooservice?version=1.0.0\")。","host/com.foo.fooservice?version=1.0.0\"),","host/com.foo.fooservice?version=1.0.0。","host/com.foo.fooservice?version=1.0.0,然后基于扩展点自适应机制,通过提供者","i);","implement","inf/spring.handl","init","injvminvoker、","invok","invokerlisten","invoker:","invoker:服务提供","jdk","message,","meta","name)","name;","privat","protocol","protocolfilterwrapp","protocollistenerwrapp","proxi","proxyfactori","proxy,用户代码通过这个","public","ref","ref(如:helloworldimpl),然后通过","refer","refer()","referenceconfig","referenceconfig.get()","registry://","registry://registri","registryprotocol","remoteexcept","return","rmi","rmi/dubbo/web","rmiinvoker、","rmiprotocol类的","sayhello(str","servic","serviceconfig","serviceconfig.export()","setdemoservice(demoservic","socket","spring","start()","string","this.demoservic","threadpool:","throw","url","url,先注册到注册中心。","url,如:","void","webserviceinvok","wrapper","xml","{","}","↩","上图是服务提供者暴露服务的主过程:","上图是服务消费的主过程:","上面代码中的","上面这个类会被封装成为一个","下面我们用一个精简的图来说明最重要的两种","中的任何一个","为了更好的解释上面这张图,我们结合服务消费和提供者的代码示例来进行说明:","从注册中心发现引用服务:","传给","侦听服务,并接收客户端发来的各种请求,通讯细节由","关于每种协议如","内的","再重新传给","初始化时,将","初始化过程细节","包括监控在内,所有附加功能,全部通过","协议头约定","协议头识别,就会调用","协议头识别,直接调用","协议扩展点,基于扩展点的","协议的","即:","即:","参数中的提供者","参数中的条件,查询提供者","发生在","只暴露服务端口:","名称空间时,会回调","向注册中心暴露服务:","和","和服务消费","在","在有注册中心,通过注册中心发现提供者地址的情况下","在有注册中心,需要注册提供者地址的情况下","在没有注册中心,直接暴露提供者的情况下","在没有注册中心,直连提供者的情况下","在遇到","基于","基于扩展点自适应机制,所有的","基于扩展点自适应机制,通过","基于扩展点自适应机制,通过提供者","处理服务暴露的关键就在","实例(如上图中的红色部分),这是服务消费的关键。接下来把","实例。这样当网络通讯层收到一个请求后,会找到对应的","实例的细节和上一章节所描述的类似。","实例,从而真正调用了服务提供者的代码。dubbo","实例,到这一步就完成具体服务到","实例,并新生成一个","实例,并调用它所对应的","实现了真正的远程服务调用。","实现细节","对象。","对象转换","将多个提供者引用,通过","就是上图中服务消费端的","属性转成","底层来实现,这就省了不少工作量。","引用服务","或","或者","所有","扩展点自适应机制,根据","扩展点进行暴露:","扩展点都会自动套上","扩展点,伪装成单个提供者引用返回。","拦截实现。","拦截服务","方法使用","方法生成","方法调用","方法,基于","方法,它主要是打开","方法,它通过","方法,将","方法,得到提供者引用。","方法,打开服务端口。","方法,返回提供者引用。","是","暴露服务","服务提供者代码:","服务提供者暴露一个服务的详细过程","服务消费者代码:","服务消费者消费一个服务的详细过程","服务,通讯细节这一块由","来实现","标签解析为","格式,所有","渗透在整个实现代码里,对于刚开始接触","满眼都是","然后","然后将","生成一个","由于","的","的人,确实容易给搞混了。","的协议头,进行不同协议的服务暴露或引用。","的参数。","的实现","的标签,都统一用","的格式为:","的格式为:","的格式为:dubbo://servic","的转化。接下来就是","的过程。","的过程,上图中的红色部分。下面我们以","直连引用服务:","等它们在调用","类。","类拿到对外提供服务的实际类","类的","类,但上面两种是最重要的。","类,将所有","线程派发模型","组装成链,在链的最后一节调用真实的引用。","组装集合,在暴露和引用前后,进行回调。","自己实现。","解析出的","解析服务","调用其对应的","转为","转换为客户端需要的接口(如:helloworld)。","转换到","这两种典型协议的实现来进行说明:","进行解析,基于一对一属性映射,将","远程调用细节","远程通讯细节","配置,spring","里还有一些其他的","领域模型中非常重要的一个概念,很多设计思路都是向它靠拢。这就使得","首先"],"impls/introduction.html":["5","contributor","spi","扩展功能插件。","扩展实现","扩展接口仅用于系统集成,或"],"impls/protocol.html":["(实现exporter接口)","(实现invoker接口)","(实现protocol接口)","(纯文本文件,内容为:xxx=com.xxx.xxxprotocol)","*","*/","...","/**","//","1.","2.","3.","5.1",">","@param","@return","@throw","abstract","abstractexport","abstractinvok","class","com","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.xxx;","doinvoke(invoc","dubbo","export","export()","export()传入的invoker由框架实现并传入,协议不需要关心。","export()必须是幂等的,也就是暴露同一个url的invoker两次,和暴露一次没有区别。","export(invok","extend","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","interfac","invocation)","invok","invoke()","invoker)","java","main","maven项目结构:","meta","new","object","packag","protect","protocol","public","refer()","refer()返回的invoker由协议实现,协议通常需要在此invoker中发送远程请求。","refer(class","remotingexception{","resourc","return","rpc","rpcexcept","rpcexception;","src","super(invoker);","super(type,","super.unexport();","tcp","throw","throwabl","type","type,","unexport()","url","url)","url);","void","xxx","xxx=com.xxx.xxxprotocol","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxprotocol","xxxprotocol.java","xxxprotocol.java:","{","|","}","中发送远程请求,export()","为中心,由外层将","传入的","其中,refer()","协议不一定要是","协议不关心业务接口的透明代理,以","协议在接收请求时,应记录请求来源方地址信息:rpccontext.getcontext().setremoteaddress();","协议扩展","协议扩展,封装远程调用细节。","契约:","对象的","已知扩展","引用远程服务:","当url中有设置check=false时,连接失败不能抛出异常,需内部自动恢复。","当暴露服务出错时抛出,比如端口已占用","当用户调用","当用户调用refer()所返回的invoker对象的invoke()方法时,协议需相应执行同url远端export()传入的invoker对象的invoke()方法。","当连接服务提供方失败时抛出","所返回的","扩展接口","扩展示例","扩展说明","扩展配置","方法。","方法时,协议需相应执行同","暴露服务的引用,用于取消暴露","暴露远程服务:","服务的执行体","服务的本地代理","服务的类型","没有配置prototol属性时,使用此配置","注意:","由协议实现,协议通常需要在此","由框架实现并传入,协议不需要关心。","网络通讯,比如通过共享文件,ipc","转换为业务接口。","返回的","进程间通讯等。","远程服务的url地址","远端"],"impls/filter.html":["(实现filter接口)","(纯文本文件,内容为:xxx=com.xxx.xxxfilter)","...","//","5.2","=","befor","class","com","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","default\",剔除添加所有缺省扩展点。","default,表示缺省扩展点插入的位置。比如:filter=\"xxx,default,yyy\",表示","dubbo","filter","filter,而不是覆盖。比如:","foo1\",剔除添加缺省扩展点","foo1。比如:filter=\"","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.filter:","invoc","invocation)","invoke(invok","invoker,","invoker.invoke(invocation);","java","main","maven","meta","packag","provid","public","resourc","result","result;","return","rpcexcept","servic","src","throw","xxx","xxx,yyy,aaa,bbb","xxx=com.xxx.xxxfilt","xxxfilter","xxxfilter.java","xxxfilter.java:","{","|","}","之前,yyi","之后。","同时配置的","和","在缺省","均会生效。如果要覆盖,需配置:","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","时,累加所有","服务提供方和服务消费方调用过程拦截,dubbo","本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。","特殊值","特殊符号","用户自定义","约定:","调用拦截扩展","项目结构:","默认在内置",",则",",表示剔除。比如:filter=\""],"impls/invoker-listener.html":["(实现invokerlistener接口)","(纯文本文件,内容为:xxx=com.xxx.xxxinvokerlistener)","...","//","5.3","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","destroyed(invok","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","invoker)","invokerlisten","java","main","maven","meta","packag","public","referred(invok","resourc","rpcexcept","src","throw","void","xxx","xxx=com.xxx.xxxinvokerlisten","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","{","|","}","已知扩展","引用监听扩展","当有服务引用时,触发该事件。","扩展接口","扩展示例","扩展说明","扩展配置","项目结构:"],"impls/exporter-listener.html":["(实现exporterlistener接口)","(纯文本文件,内容为:xxx=com.xxx.xxxexporterlistener)","...","//","5.4","class","com","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","exported(export","exporter)","exporterlisten","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","java","main","maven","meta","packag","public","resourc","rpcexcept","src","throw","unexported(export","void","xxx","xxx=com.xxx.xxxexporterlisten","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","{","|","}","已知扩展","当有服务暴露时,触发该事件。","扩展接口","扩展示例","扩展说明","扩展配置","暴露监听扩展","项目结构:"],"impls/cluster.html":["(实现cluster接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcluster)","...","//","5.5",">","abstractclusterinvoker(directory)","class","cluster","com","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","directory)","doinvoke(invoc","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","invocation,","invok","invokers,","java","list>","loadbal","loadbalance)","main","maven","merge(directori","meta","new","packag","public","resourc","result","return","rpcexcept","src","throw","xxx","xxx=com.xxx.xxxclust","xxxcluster","xxxcluster.java","xxxcluster.java:","{","|","}","};","已知扩展","当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。","扩展接口","扩展示例","扩展说明","扩展配置","没有配置cluster时,使用此配置","集群扩展","项目结构:"],"impls/router.html":["(实现loadbalance接口)","(纯文本文件,内容为:xxx=com.xxx.xxxrouterfactory)","...","//","5.6","class","com","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","invoc","invocation)","invokers,","java","list>","main","maven","meta","packag","public","resourc","routerfactori","rpcexcept","select(list>","src","throw","xxx","xxx=com.xxx.xxxrouterfactori","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","{","|","}","从多个服务提者方中选择一个进行调用。","已知扩展","扩展接口","扩展示例","扩展说明","路由扩展","项目结构:"],"impls/load-balance.html":["(实现loadbalance接口)","(纯文本文件,内容为:xxx=com.xxx.xxxloadbalance)","...","//","5.7",">","class","com","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","invoc","invocation)","invok","invokers,","java","loadbal","main","maven","meta","packag","public","resourc","rpcexcept","select(list>","src","throw","xxx","xxx=com.xxx.xxxloadbal","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","{","|","}","从多个服务提者方中选择一个进行调用","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置loadbalance时,使用此配置","负载均衡扩展","项目结构:"],"impls/merger.html":["(实现merger接口)","(纯文本文件,内容为:xxx=com.xxx.xxxmerger)","...","//","5.8","class","com","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.xxx;","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","java","main","maven","merge(t...","merger","meta","packag","public","resourc","results)","src","t","xxx","xxx=com.xxx.xxxmerg","xxxmerger","xxxmerger.java","xxxmerger.java:","{","|","}","合并结果扩展","合并返回结果,用于分组聚合。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","项目结构:"],"impls/registry.html":["(实现registryfactory接口)","(实现registry接口)","(纯文本文件,内容为:xxx=com.xxx.xxxregistryfactory)","*","*/","...","/**","//","1.","2.","3.","4.","5.","5.9","6.","7.",">","@param","@return","@see","class","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}的参数。","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}的返回值。","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.xxx;","consumers,","dubbo","extend","getregistry(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","interfac","java","list","listen","listener)","listener);","lookup(url","main","maven","meta","new","notify(list","notifylisten","notifylistener.java:","overrides,允许只通知其中一种类型,但该类型的数据必须是全量的,不是增量的。","packag","public","register(url","registri","registryfactori","registryfactory.java:","registryservic","registryservice.java:","resourc","return","routes,","src","subscribe(url","unregister(url","unsubscribe(url","url","url)","url);","url,","urls);","void","xxx","xxx=com.xxx.xxxregistryfactori","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","{","|","}","中途变更时,允许不同类型的数据分开通知,比如:providers,","允许uri相同但参数不同的url并存,不能覆盖。","允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.barservice&version=1.0.0","取消注册服务.","取消注册需处理契约:","取消订阅服务.","取消订阅需处理契约:","变更事件监听器,不允许为空","如果一种类型的数据为空,需通知一个empty协议并带category参数的标识性url数据。","如果是dynamic=false的持久存储数据,找不到注册数据,则抛illegalstateexception,否则忽略。","如果没有订阅,直接忽略。","已注册信息列表,可能为空,含义同{@link","已注册信息列表,总不为空,含义同{@link","已知扩展","并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*","当url设置了category=overrides时,表示分类存储,缺省类别为providers,可按分类部分通知数据。","当url设置了category=overrides,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。","当url设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。","当url设置了check=false时,订阅失败后不报错,在后台定时重试。","当url设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。","当收到服务变更通知时触发。","当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。","当注册中心重启,网络抖动,需自动恢复订阅请求。","当设置check=false时表示不检查连接,否则在连接不上时抛出异常。","必须阻塞订阅过程,等第一次通知完后再返回。","总是以服务接口和数据类型为维度全量通知,即不会通知一个服务的同类型的部分数据,用户不需要对比上一次通知结果。","扩展契约","扩展接口","扩展示例","扩展说明","扩展配置","按全url匹配取消注册。","按全url匹配取消订阅。","支持backup=10.20.153.10备选注册中心集群地址。","支持file=registry.cache本地磁盘文件缓存。","支持session=60000会话超时或过期设置。","支持timeout=1000请求超时设置。","支持url上的username:password权限认证。","查询条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","没有配置registry属性时,使用此配置","注册中心地址,不允许为空","注册中心引用,总不返回空","注册中心扩展","注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","注册服务.","注册需处理契约:","订阅时的第一次通知,必须是一个服务的所有类型数据的全量通知。","订阅服务.","订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","订阅需处理契约:","负责服务的注册与发现。","连接注册中心.","连接注册中心需处理契约:","通知者(即注册中心实现)需保证通知的顺序,比如:单线程推送,队列串行化,带版本对比。","通知需处理契约:","项目结构:"],"impls/monitor.html":["(实现monitorfactory接口)","(实现monitor接口)","(纯文本文件,内容为:xxx=com.xxx.xxxmonitorfactory)","...","//","5.10","class","com","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.xxx;","count(url","dubbo","getmonitor(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","java","main","maven","meta","monitor","monitorfactori","new","packag","public","resourc","return","src","statistics)","url)","void","xxx","xxx=com.xxx.xxxmonitorfactori","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","监控中心扩展","负责服务调用次和调用时间的监控。","项目结构:"],"impls/extension-factory.html":["(实现extensionfactory接口)","(纯文本文件,内容为:xxx=com.xxx.xxxextensionfactory)","...","//","5.11","class","com","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.xxx;","dubbo","extensionfactori","getextension(class","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","java","main","maven","meta","name)","object","packag","public","resourc","src","string","type,","xxx","xxx=com.xxx.xxxextensionfactori","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","{","|","}","已知扩展","扩展接口","扩展点加载扩展","扩展点本身的加载容器,可从不同容器加载扩展点。","扩展示例","扩展说明","扩展配置","项目结构:"],"impls/proxy-factory.html":["(实现proxyfactory接口)","(纯文本文件,内容为:xxx=com.xxx.xxxproxyfactory)","...","//","5.12",">","class","com","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.rpcexception;","com.xxx;","dubbo","getinvoker(t","getproxy(invok","implement","import","inf","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","invok","invoker)","java","main","maven","meta","packag","proxy,","proxyfactori","public","resourc","rpcexcept","src","t","throw","type,","url","url)","xxx","xxx=com.xxx.xxxproxyfactori","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","{","|","}","动态代理扩展","将","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","接口转换成业务接口。","没有配置proxy属性时,使用此配置","项目结构:"],"impls/compiler.html":["(实现compiler接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcompiler)","...","//","5.13","class","com","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.xxx;","compil","dubbo","getextension(class","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","java","main","maven","meta","name)","object","packag","public","resourc","src","string","type,","xxx","xxx=com.xxx.xxxcompil","xxxcompil","xxxcompiler.java","xxxcompiler.java:","{","|","}","代码编译器,用于动态生成字节码,加速调用。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","编译器扩展","自动加载","项目结构:"],"impls/dispatcher.html":["(实现dispatcher接口)","(纯文本文件,内容为:xxx=com.xxx.xxxdispatcher)","...","//","5.14",">","class","com","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.xxx;","dispatch","dubbo","group","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","java","lookup(url","main","maven","meta","packag","public","resourc","src","url)","xxx","xxx=com.xxx.xxxdispatch","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置dispatcher属性时,使用此配置","消息派发扩展","通道信息派发器,用于指定线程池模型。","项目结构:"],"impls/threadpool.html":["(实现threadpool接口)","(纯文本文件,内容为:xxx=com.xxx.xxxthreadpool)","...","//","5.15",">","class","com","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.xxx;","dubbo","executor","getexecutor()","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","java","java.util.concurrent.executor;","main","maven","meta","packag","public","resourc","src","threadpool","xxx","xxx=com.xxx.xxxthreadpool","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","服务提供方线程程实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。","没有配置threadpool时,使用此配置","线程池扩展","项目结构:"],"impls/serialize.html":["(实现objectinput接口)","(实现objectoutput接口)","(实现serialization接口)","(纯文本文件,内容为:xxx=com.xxx.xxxserialization)","5.16",">","class","com","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.xxx;","deserialize(paramet","dubbo","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","input)","inputstream","ioexcept","java","main","maven","meta","new","objectinput","objectoutput","output)","outputstream","packag","parameters,","public","resourc","return","serial","serialize(paramet","src","throw","xxx","xxx=com.xxx.xxxseri","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxserial","xxxserialization.java","xxxserialization.java:","{","|","}","将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。","已知扩展","序列化扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置serialization时,使用此配置","项目结构:"],"impls/remoting.html":["(实现client接口)","(实现server接口)","(实现transporter接口)","(纯文本文件,内容为:xxx=com.xxx.xxxtransporter)","...","//","5.17",">","abstractcli","abstractserv","bind(url","channel","channelhandl","class","client","collect","com","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.xxx;","connect(url","doclose()","doconnect()","doopen()","dubbo","extend","getchannel()","getchannel(inetsocketaddress","getchannels()","handler)","handler);","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","java","main","maven","meta","new","packag","protect","public","remoteaddress)","remotingexcept","remotingexception{","resourc","return","server","src","super(url,","throw","throwabl","transport","url,","void","xxx","xxx=com.xxx.xxxtransport","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置transporter/server/client属性时,使用此配置","网络传输扩展","远程通讯的服务器及客户端传输实现。","项目结构:"],"impls/exchanger.html":["(实现exchangeclient接口)","(实现exchanger接口)","(实现exchangeserver接口)","(纯文本文件,内容为:xxx=com.xxx.xxxexchanger)","...","//","5.18",">","bind(url","class","com","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.xxx;","connect(url","dubbo","exchang","exchangecli","exchangehandl","exchangeserv","handler)","handler);","impel","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","java","main","maven","meta","new","packag","public","remotingexcept","request","resourc","respons","return","src","throw","url,","xxx","xxx=com.xxx.xxxexchang","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","{","|","}","信息交换扩展","信息交换语义。","基于传输层之上,实现","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置exchanger属性时,使用此配置","项目结构:"],"impls/networker.html":["(实现networker接口)","(纯文本文件,内容为:xxx=com.xxx.xxxnetworker)","...","//","5.19",">","class","com","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.xxx;","dubbo","group","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","java","lookup(url","main","maven","meta","network","packag","public","resourc","src","url)","xxx","xxx=com.xxx.xxxnetwork","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","{","|","}","对等网络节点组网器。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置networker属性时,使用此配置","组网扩展","项目结构:"],"impls/telnet-handler.html":["(实现telnethandler接口)","(纯文本文件,内容为:xxx=com.xxx.xxxtelnethandler)","...","//","127.0.0.1","20880","5.20",">","@help(parameter=\"...\",","arg","channel,","class","com","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.xxx;","detail=\"...\")","dubbo","dubbo>","implement","import","inf","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","java","main","maven","message)","meta","packag","public","remotingexcept","resourc","src","string","summary=\"...\",","telnet","telnet(channel","telnethandl","throw","xxx","xxx=com.xxx.xxxtelnethandl","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","{","|","}","命令扩展","已知扩展","所有服务器均支持","扩展接口","扩展示例","扩展说明","扩展配置","没有配置telnet属性时,使用此配置","用法","访问,用于人工干预。","项目结构:"],"impls/status-checker.html":["(实现statuschecker接口)","(纯文本文件,内容为:xxx=com.xxx.xxxstatuschecker)","...","//","5.21",">","check()","class","com","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.xxx;","dubbo","host","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","java","main","maven","meta","packag","public","resourc","src","statu","statuscheck","telnet","xxx","xxx=com.xxx.xxxstatuscheck","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","{","|","}","命令和","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","检查服务依赖各种资源的状态,此状态检查可同时用于","没有配置status属性时,使用此配置","状态检查扩展","的","页面。","项目结构:"],"impls/container.html":["(实现container接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcontainer)","...","//","5.22","class","com","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.xxx;","contain","dubbo","implement","inf","inf/dubbo/com.alibaba.dubbo.container.container:","java","jetti","log4j","main","maven","meta","packag","public","resourc","spring","src","start()","statu","stop()","xxx","xxx=com.xxx.xxxcontain","xxxcontain","xxxcontainer.java","xxxcontainer.java:","{","|","}","容器扩展","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","服务容器扩展,用于自定义加载内容。","项目结构:"],"impls/page.html":["(实现pagehandler接口)","(纯文本文件,内容为:xxx=com.xxx.xxxpagehandler)","...","//","5.23",">","class","com","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.xxx;","dubbo","group","implement","import","inf","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","java","lookup(url","main","maven","meta","packag","pagehandl","public","resourc","src","url)","xxx","xxx=com.xxx.xxxpagehandl","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","{","|","}","对等网络节点组网器。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置page属性时,使用此配置","页面扩展","项目结构:"],"impls/cache.html":["(实现statuschecker接口)","(纯文本文件,内容为:xxx=com.xxx.xxxcachefactory)","...","//","5.24",">","cach","cache(url","cachefactori","class","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.xxx;","dubbo","get(object","getcache(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","java","key)","key,","key,缓存返回结果。","main","maven","meta","name)","name);","new","object","packag","public","put(object","resourc","return","src","string","url,","value)","void","xxx","xxx=com.xxx.xxxcachefactori","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","{","|","}","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置cache属性时,使用此配置","用请求参数作为","缓存扩展","项目结构:"],"impls/validation.html":["(实现validation接口)","(纯文本文件,内容为:xxx=com.xxx.xxxvalidation)","...","//","5.25",">","class","com","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.xxx;","dubbo","except","getvalidator(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.validation.validation:","invocation)","java","main","maven","meta","object","packag","public","resourc","src","throw","url)","valid","validate(invoc","void","xxx","xxx=com.xxx.xxxvalid","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","{","|","}","参数验证扩展点。","已知扩展","扩展接口","扩展示例","扩展说明","扩展配置","没有配置validation属性时,使用此配置","项目结构:","验证扩展"],"impls/logger-adapter.html":["(实现loggeradapter接口)","(纯文本文件,内容为:xxx=com.xxx.xxxloggeradapter)","...","//","5.26","class","com","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.xxx;","ddubbo:application.logger=xxx","dubbo","getlogger(url","implement","import","inf","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","info(str","java","logger","loggeradapt","main","maven","meta","msg)","packag","public","resourc","src","url)","void","xxx","xxx=com.xxx.xxxloggeradapt","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","{","|","}","已知扩展","或者:","扩展接口","扩展示例","扩展说明","扩展配置","日志输出适配扩展点。","日志适配扩展","项目结构:"],"contract.html":["6","dubbo","error","info","url","warn","作为上下文信息贯穿整个扩展点设计体系。","公共契约","公共契约,希望所有扩展点遵守。","参数,url","如果不可恢复或需要报警,打印","如果可恢复异常,或瞬时的状态不一致,打印","所有扩展点参数都包含","日志","日志。","正常运行时的中间状态提示,打印","这里记录的是","采用标准格式:protocol://username:password@host:port/path?key=value&key=valu"],"coding.html":["\"号分隔","1.","1。","2.","2。","3.","3。","7","abstractxxx。","aop","code","comment","convent","dbunit。","doc","dubbo","easymock,集成测试用","error","errorcod","extensionload","failsaf","hessian","info","invok","ioc","isavail","java","javadoc","junit","languag","logutil","map","program","rmi,","rpcexcept","rpcexception。","spi","spring","support","teardown","testng,数据库测试用","tool","try...fin","url","url参数全部用小写,多个单词用\".\"号分隔","warn","write","xxxwrapper,基类都命名为","↩","不能有子类型,所有类型信息用","代码风格","传参,不要自定义","保持单元测试用例的运行速度,不要将性能和大的集成用例放在单元测试中。","保持单元测试的每个用例都用","减少","单元和集成测试","单元测试统一用","即可完成桥接,它们可以用公共基类实现此逻辑。","只负载加载扩展点,包括","和","基于复用度分包,总是一起使用的放在同一包下,将接口和基类分成独立模块,大的实现也使用独立模块。","基类也是","子包下,不同实现用放在以扩展点名字命名的子包下。","完成,extensionload","实现扩展点的通用行为,而不要用基类,比如负载均衡之前的","对于容错行为的测试,比如","对外的唯一异常类型,所有内部异常,如果要抛出给用户,必须转为","对多种相似类型的抽象,用基类实现,比如","尽可能携带完整的上下文信息,比如出错原因,出错的机器地址,调用对方的地址,连的注册中心地址,使用","尽可能用","尽量保持子包依赖父包,而不要反向。","尽量减少","尽量将直接原因写在最前面,所有上下文信息,在原因后用键值对显示。","尽量采用","嵌套,保持","建议应用方在监控中心配置","异常和日志","循环等待结果的测试用例,对定时器和网络的测试,用以将定时器中的逻辑抽为方法测试。","或","或其它上下文格式,配置信息也转成","所有接口都放在模块的根包下,基类放在","打印","扩展。","扩展点之间的组合将关系由","扩展点基类与","抛出异常的地方不用打印日志,由最终处理异常者决定打印日志的级别,吃掉异常必需打印日志。","断言日志输出。","日志实时报警,warn","日志每周汇总发送通知。","日志表示可以自动恢复,打印","日志表示需要报警,打印","是","标识,以便保持兼容。","格式使用。","检查,它是独立于负载均衡之外的,不需要检查的是url参数关闭。","模块与分包","注入扩展点之间的依赖,不要直接依赖","的一部分,每个扩展点都应该有方便使用的基类支持。","的工厂方法。","的测试,统一用","的源代码和","的版本等。","的简洁性。","等第三方协议都已生成了接口代理,只需将将接口代理转成","类都命名为","约定","编码约定","表示正常信息或完全不影响运行。","遵循以下的规范:","配置和","配置对象属性首字母小写,多个单词用驼峰命名","配置属性全部用小写,多个单词用\"","释放资源。"],"principals/introduction.html":["8","javaey","上发表的系列文章。","本章节的设计原则摘录自梁飞在","设计原则"],"principals/code-detail.html":["0","100","8.1","bug,不小心改到了这里,直接引爆故障。对于这个例子,一个原则就是永远不要区分","bug,比如:获取程序的版本号,会通过扫描","catch","catch),而如果它抛出异常会导致主流程异常,这是我们不希望看到的。但这里要控制个度,不要随意","catch,更不要无声无息的吃掉异常。","class),就优先将它设计成不变类。不变类有天然的并发共享优势,减少同步或复制,而且可以有效帮忙分析线程安全的范围。就算是可变类,对于从构造函数传入的引用,在类中持有时,最好将字段","dubbo","empti","final","final,以免被中途误修改引用。不要以为这个字段是私有的,这个类的代码都是我自己写的,不会出现对这个字段的重新赋值。要考虑的一个因素是,这个代码可能被其他人修改,他不知道你的这个弱约定,fin","getversion()","http://javatar.iteye.com/blog/1056664","jar","junit","manifest","map,可以认为是可靠的,而写入数据库等,可以认为是不可靠的。开发人员必须在写每一行代码时,都注意它的可靠性与否,在代码中尽量划分开,并对失败做异常处理,并为容错,自我保护,自动恢复或切换等补偿逻辑提供清晰的切入点,保证后续增加的代码不至于放错位置,而导致原先的容错处理陷入混乱。","mock","null","tri","中加上一个全函数的","保证线程安全性和可见性","值。","分布式服务框架后续如果维护人员增多或变更,会出现质量的下降,","分离可靠操作和不可靠操作","前面不停的提到代码被其他人修改,这也开发人员要随时紧记的。这个其他人包括未来的自己,你要总想着这个代码可能会有人去改它。我应该给修改的人一点什么提示,让他知道我现在的设计意图,而不要在程序里面加潜规则,或埋一些容易忽视的雷,比如:你用","包名称抓取版本号,这个逻辑是辅助性的,但代码却不少,初步测试也没啥问题,但应该在整个","可能存在未知特定场景异常,或被其他的开发人员误修改逻辑(但一般人员不会去掉","和","多个测试用例不通过。时间一紧,谁有这个闲功夫去改这么多形态各异的测试用例?久而久之,这个测试代码就已经不能真实反应代码现在的状况,很多时候会被迫绕过。最好的情况是,修改一行代码,有且只有一行测试代码不通过。如果修改了代码而测试用例还能通过,那也不行,表示测试没有覆盖到。另外,可","大家经常说,魔鬼在细节中,确实如此。","如果一个类可以成为不变类(immut","对于框架的开发人员,对线程安全性和可见性的深入理解是最基本的要求。需要开发人员,在写每一行代码时都应在潜意识中确保其正确性。因为这种代码,在小并发下做功能测试时,会显得很正常。但在高并发下就会出现莫明其妙的问题,而且场景很难重现,极难排查。","就是一个不变契约。","尽早失败也应该成为潜意识,在有传入参数和状态变化时,均在入口处全部断言。一个不合法的值和状态,在第一时间就应报错,而不是等到要用时才报错。因为等到要用时,可能前面已经修改其它相关状态,而在程序中很少有人去处理回滚逻辑。这样报错后,其实内部状态可能已经混乱,极易在一个隐蔽分支上引发程序不可恢复。","尽早失败和前置断言","异常防御,但不忽略异常","引用和","性是隔离的基础,把间接依赖的逻辑屏蔽掉。可","性的一个最大的杀手就是静态方法,尽量少用。","我在想,有没有什么是需要大家共同遵守的,根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节。可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记。在每一行代码中都考虑这些因素,是需要很大耐心的,","打印错误日志,并返回基本版本,因为","提高代码的可测性","最近一直担心","的容易程度,和测试的隔离性。至于测试的自动性,可重复性,非偶然性,无序性,完备性(全覆盖),轻量性(可快速执行),一般开发人员,加上","等于","等工具的辅助基本都能做到,也能理解它的好处,只是工作量问题。这里要特别强调的是测试用例的单一性(只测目标类本身)和隔离性(不传染失败)。现在的测试代码,过于强调完备性,大量重复交叉测试,看起来没啥坏处,但测试代码越多,维护代价越高。经常出现的问题是,修改一行代码或加一个判断条件,引起","缩小可变域和尽量","表示不可用,size","表示黑名单,这就是一个雷,下一个修改者,包括你自己,都不会记得有这样的约定,可能后面为了改某个其它","这是我最不喜欢看到的异常,尤其在核心框架中,我更愿看到信息详细的参数不合法异常。这也是一个健状的程序开发人员,在写每一行代码都应在潜意识中防止的异常。基本上要能确保一次写完的代码,在不测试的情况,都不会出现这两个异常才算合格。","这里的可测性主要指","这里的可靠是狭义的指是否会抛出异常或引起状态不一致,比如,写入一个线程安全的","这里讲的异常防御,指的是对非必须途径上的代码进行最大限度的容忍,包括程序上的","防止空指针和下标越界","降低修改时的误解性,不埋雷","魔鬼在细节"],"principals/general-knowledge.html":["(applic","(servic","8.2","action","action,dubbo","action,里面有个","api","applicationcontext,dubbo","beanfactory,maven","bean,strut","callback","classpath","coc","cover","deleteuser()。","deleteuser(id),删除用户并返回被删除的用户,考虑改为","execute()","execute(),那拦截器接口通常为","execute(execution),原理一样。当然,实现方式可以任意,上面只是举例。","getuser()","http://javatar.iteye.com/blog/706098","interface)","invoc","invoke()","invoke(),那拦截器接口通常为","invoke(invocation),invoc","json","jsonact","jsonaction,这就是","jsonrender","n","newinstance()","onchanged()。比如远程调用框架,当网络断开或连上应该发出一个事件,当出现错误也可以考虑发出一个事件,这样外围应用就有可能观察到框架内部的变化,做相应适应。","orm","osgi,","plexus。通常核心是不应该带有功能性的,而是一个生命周期和集成容器,这样各功能可以通过相同的方式交互及扩展,并且任何功能都可以被替换。如果做不到微核,至少要平等对待第三方,即原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到。原作者要把自己也当作扩展者,这样才能保证框架的可持续性及由内向外的稳定性。","program","provid","queue","render","servicemanag","service,napoli","set","spi","spring","sql","templat","updat","veloc","velocityact","velocityaction,要用","velocityrender","void","web","一些设计上的基本常识","不要控制外部对象的生命周期","与","主过程为","也代表拦截器行为本身,这样上一拦截器的","什么是会话?就是一次交互过程。会话中重要的概念是上下文,什么是上下文?比如我们说:“老地方见”,这里的“老地方”就是上下文信息。为什么说“老地方”对方会知道,因为我们前面定义了“老地方”的具体内容。所以说,上下文通常持有交互过程中的状态变量等。会话对象通常较轻,每次请求都重新创建实例,请求结束后销毁。简而言之:把元信息交由实体域持有,把一次请求中的临时状态由会话域持有,由服务域贯穿整个过程。","任何框架或组件,总会有核心领域模型,比如:spring","住所有需求,允许外置行为,是框架的基本扩展方式。这样,如果有人想在远程调用前,验证下令牌,验证下黑白名单,统计下日志;如果有人想在","使用接口和","做为扩展方式,要用","其实是包装的下一拦截器的过程,直到最后一个拦截器的","分离","创建一个实例,这样框架就控制了","区分命令与查询,明确前置条件与后置条件","参见:谈谈扩充式扩展与增量式扩展","另外,尽可能做一个标准约定,如果用户按某种约定做事时,就不需要该配置项。比如:配置模板位置,你可以约定,如果放在","另外,每个方法都尽量前置断言传入参数的合法性,后置断言返回结果的合法性,并文档化。","可配置一定可编程,并保持友好的","合理的方式是,有一个单独的","和","和一个","因为使用环境的不确定因素很多,框架总会有一些配置,一般都会到","在重要的过程上设置拦截接口","增量式扩展,而不要扩充原始核心概念","大凡发展的比较好的框架,都遵守微核的理念。eclips","如果你要写个远程调用框架,那远程调用的过程应该有一个统一的拦截接口。如果你要写一个","实现类的实例报上来,框架只是使用这些实例,这些对象是怎么创建的,怎么销毁的,都和框架无关,框架最多提供工具类辅助管理,而不是绝对控制。","实现类的生命周期,action","实现类的类名或类元信息报上来,然后在内部通过反射","实现,web","对象封装了本来要执行过程的上下文,并且","微核插件式,平等对待第三方","或","执行前加下分页包装,做下数据权限控制,统计下","执行时间;如果有人想在请求执行前检查下角色,包装下输入输出流,统计下请求量,等等,就可以自行完成,而不用侵入框架内部。拦截接口,通常是把过程本身用一个对象封装起来,传给拦截器链,比如:远程调用主过程为","扩展接口。框架如果让使用者或扩展者把","扩展接口职责尽可能单一,具有可组合性","接口中。","接口做渲染输出。","接口叫","接口混在了","接口给扩展者控制输出方式,比如用","接口,方法名通常是过去式的,比如","接口,有","方法,是给使用者用来写业务逻辑的。然后,web","方法,由拦截器决定什么时候执行,同时,invoc","是包装的最终的","是给使用者用的,而","是给扩展者用的。在设计时,尽量把它们隔离开,而不要混在一起。也就是说,使用者是看不到扩展者写的实现的。","最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里。","服务域/实体域/会话域分离","服务域也就是行为域,它是组件的功能集,同时也负责实体域和会话域的生命周期管理,","某个值,或","某个属性值,或查询一条数据库记录。命令是指有副作用的,也就是会修改状态,比如","某条数据库记录。如果你的方法即做了修改状态的操作,又做了查询返回,如果可能,将其拆成写读分离的两个方法,比如:user","框架使用一个都继承","框架将","框架或组件通常有两类客户,一个是使用者,一个是扩展者。api","框架有一个","框架,它有一个","框架,那至少","框架,那请求的执行过程应该要有拦截接口,等等。没有哪个公用的框架可以","模板输出的就继承","模板输出还是用","次结果都是一样的,比如","比如","比如上面说的","比如,远程调用框架它的协议是可以替换的。如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持是可以细分为底层通讯,序列化,动态代理方式等等。如果将接口拆细,正交分解,会更便于扩展者复用已有逻辑,而只是替换某部分实现策略。当然这个分解的粒度需要把握好。","比如:一个","没有分离的反面例子,spi","的","的微核是","的执行过程,map","的生老病死,框架都自己做了,外部扩展或集成都无能为力。好的办法是让使用者或扩展者把","的输出转交给","目录下就不用配了,如果你想换个目录,就配置下。","直扫某个指定名称的配置,或者启动时允许指定配置路径。做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行,否则当使用者需要将你的框架与另一个框架集成时就会带来很多不必要的麻烦。","等。服务域的对象通常会比较重,而且是线程安全的,并以单一实例服务于所有调用。","等等。这个核心领域模型及其组成部分称为实体域,它代表着我们要操作的目标本身。实体域通常是线程安全的,不管是通过不变类,同步状态,或复制的方式。","约定","输出的就继承","输出等。如果这个","过程要有拦截接口;如果你要写一个","过程;同理,sql","返回的方法是命令。查询方法通常是幂等性的,无副作用的,也就是不改变任何状态,调","这个是契约式设计的一部分,尽量遵守有返回值的方法是查询方法,void","这里先要讲一个事件和上面拦截器的区别,拦截器是干预过程的,它是过程的一部分,是基于过程行为的,而事件是基于状态数据的,任何行为改变的相同状态,对事件应该是一致的。事件通常是事后通知,是一个","里有一个","重要的状态的变更发送事件并留出监听接口"],"principals/expansibility.html":["8.3","args),后来,有了无接口调用的需求,就是没有接口方法也能调用,并将","args),导致不管是不是无接口调用,都得把","boolean","bu","byte[]","class[]","classload","generalservic","generalserviceimpl","http://javatar.iteye.com/blog/690845","invoke()","invoke(method","invoke(str","map","method","method,","methodname,","new","object[]","osgi","osgi,却为","osgi,这样序列化时,io","parametertyp","parametertypes,","pojo","request","request/respons","request,所以在","respons","response。如果再来一个会话消息发送需求,那就再加一个","returntypes,","session","sessionrequest/sessionrespons","session,不需要","string","string[]","string[]。如果选用增量式扩展,应该是保持原有接口不变,增加一个","与","交互,然后发现,原来同步消息发送是会话消息的一种特殊情况,所有场景都传","从","付出了代价。而如果采用增量式扩展方式,非","再再比如:无状态消息发送,很简单,序列化一个对象发过去就行。后来有了同步消息发送需求,需要一个","再比如:最开始,远程服务都是基于接口方法,进行透明化调用的。这样,扩展接口就是,","出来的,我们不自觉选了一个扩展式扩展,把扩展接口改成了","可能和业务方的","和部门以及产品线的需求,势必会将很多不相干的功能凑在一起,客户可以选择性的使用。为了兼容更多的需求,每个产品,每个框架,都在不停的扩展,而我们经常会选择一些扩展的扩展方式,也就是将新旧功能扩展成一个通用实现。我想讨论是,有些情况下也可以考虑增量式的扩展方式,也就是保留原功能的简单性,新功能独立实现。我最近一直做分布式服务框架的开发,就拿我们项目中的问题开涮吧。","处理。","处理,会话消息发送,再加一个","如果采用增量式扩展,无状态消息发送原封不动,同步消息发送,在无状态消息基础上加一个","实现会将收到的调用转给目标接口,这样就能将新功能增量到旧功能上,并保持原来结构的简单性。","实现即可。","对象是不能直接","对象都转换成","我们平台的产品越来越多,产品的功能也越来越多。平台的产品为了适应各","所在的","接口,里面有一个通用的","数组,拷贝一次。然而,大部分场景都用不上","数组,然后传给业务方的","方法,和其它正常业务上的接口一样的调用方式,扩展接口也不用变,只是","是隔离的。需要将流转换成","比如:远程调用框架,肯定少不了序列化功能,功能很简单,就是把流转成对象,对象转成流。但因有些地方可能会使用","状态,表示要不要返回","环境,都先将流转成","的","的代码原封不动,再加一个","的地方无视即可。","的场景扩展了一下,这样,不管是不是","的实现,要用","的时候,直接依赖","表示。因为","谈谈扩充式扩展与增量式扩展","转成","进行序列化。为了适应","进行配对,采用扩展式扩展,自然想到,无状态消息其实是一个没有","里加一个","需求,把原来非"],"principals/configuration.html":["${dubbo.registry.address}","8.4",">","annot","boolean","classload","classpath","context.xml","d","dcom.xxx.xxxservice=dubbo://10.1.1.1:1234","dsl","dubbo","dubbo.properties,因为该约定经常造成配置冲突。","dubbo.properties,改为全","host","http://javatar.iteye.com/blog/949527","inf/servic","jar","java","jdbc","jdk","jvm","key","key,","meta","plugin.xml","plugin.xml,struts2","properti","propertyplaceholderconfigur","schame","schema,配置简化后很方便。当然,也有它的缺点,就是强依赖","spring","spring,可以提编程接口做了配套方案。","strut","system_properties_mode_override,可以通过","valu","xml","一样约定一个覆盖配置文件,在程序外部,修改部分配置,便于测试。","下加载该配置。我们平台的很多项目也使用类似策略,如:dubbo.properties,comsat.xml","下放置接口类全名文件,内容为每行一个实现类类名,就像","下约定一个以项目为名称的","不管选哪种方式,所有配置项,都应保持同一风格,dubbo","世界里,比较常规的做法,是在","世界里,通常是约定在每个","中的加密算法扩展,脚本引擎扩展,新的","代替,","你可以约定:","依赖。","做为参考值,如果消费方没有配置,就以提供方的配置为准,相当于消费方继承了提供方的建议配置值。而注册中心在传递配置时,也可以在中途修改配置,这样就达到了治理的目的,继承关系相当于:服务消费者","做为配置。有时候这类配置也可以用","允许自定义","包下放一个指定文件加载,比如:eclips","包下,放置名为","包的","即存在描述配置,也有环境配置。一部分用","参数","参数,或者像","另外扩展配置,可能不尽相同。如果只是策略接口实现类替换,可以考虑","另外,dubbo","可编程配置","向前兼容很好办,你只要保证配置只增不减,就基本上能保证向前兼容。但向后兼容,也是要注意的,要为后续加入新的配置项做好准备。如果配置出现一个特殊配置,就应该为这个“特殊”情况约定一个兼容规则,因为这个特殊情况,很有可能在以后还会发生。比如:有一个配置文件是保存“服务=地址”映射关系的,其中有一行特殊,保存的是“注册中心=地址”。现在程序加载时,约定“注册中心”这个key是特殊的,做特别处理,其它的都是“服务”。然而,新版本发现,要加一项“监控中心=地址”,这时,旧版本的程序会把“监控中心”做为“服务”处理,因为旧代码是不能改的,兼容性就很会很麻烦。如果先前约定“特殊标识+xxx”为特殊处理,后续就会方便很多。","向后兼容性,可以多向html5学习,参见:html5设计原理","因为线上只有一个注册中心,这样的配置是没有问题的,而测试环境可能有两个注册中心,测试人员不可能去修改配置,改为:","因为这些配置和业务逻辑相关,放在代码里也是合理的。","在","存在同样的配置时,可能误加载,以及在","对于环境配置,在","对应","就出现过这样的问题,中间层用“地址”做为缓存","扩展配置,比如:协议扩展,策略扩展等。","扩展配置,通常对配置的聚合要求比较高。因为产品需要发现第三方实现,将其加入产品内部。在","扫描","描述配置,比如:服务接口描述,服务版本等。","提供配置时,要同时考虑开发人员,测试人员,配管人员,系统管理员。测试人员是不能修改代码的,而测试的环境很可能较为复杂,需要为测试人员留一些“后门”,可以在外围修改配置项。就像","支持在","支持通过","新版本去掉了","新版本提供了与","方式,去掉过多的","旧版本所有的超时时间,重试次数,负载均衡策略等都只能在服务消费方配置。但实际使用过程中发现,服务提供方比消费方更清楚,但这些配置项是在消费方执行时才用到的。新版本,就加入了在服务提供方也能配这些参数,通过注册中心传递到消费方,","旧版本通过约定在每个","是否使用注册中心,注册中心地址。","是否允许重试,重试次数。","服务提供者","标准的服务发现机制,即在","每个都是先配置一个","注册中心","环境配置,比如:连接数,超时等配置。","现在的设计是完全无侵入,也就是使用者只依赖于配置契约。经过多个版本的发展,为了满足各种需求场景,配置越来越多。为了保持兼容,配置只增不减,里面潜伏着各种风格,约定,规则。新版本也将配置做了一次调整,去掉了","用一个无效值代表关闭,n/a地址,0重试次数等。","的","的值中,通过竖号分隔多个注册中心地址,用于表示多注册中心地址。","的超时时间设置,每个服务,每个方法,都应该可以设置超时时间。但很多服务不关心超时,如果要求每个方法都配置,是不现实的。所以","的项目越来越多,直接使用","直接使远程服务调用绕过注册中心,进行点对点测试。还有一种情况,开发人员增加配置时,都会按线上的部署情况做配置,如:","等。这样有它的优势,就是基于约定,简化了用户对配置加载过程的干预。但同样有它的缺点,当","等结构。如果有复杂的生命周期管理,可能需要","等配置。有时候扩展会通过注册接口的方式提供。","等,这类配置可以考虑","类型的开关,再配置一个值。","而对于描述配置,因为要参与业务逻辑,通常会嵌到应用的生命周期管理中。现在使用","而底层,给“地址”加了一个缺省端口号,导致不加端口号的“地址”和加了缺省端口的“地址”并没有使用相同的缓存。","而描述配置,通常信息比较多,甚至有层次关系,用","自带的","规范。","选的是第二种。相似的还有,超时时间,重试时间,定时器间隔时间。如果一个单位是秒,另一个单位是毫秒(c3p0的配置项就是这样),配置人员会疯掉。","通常环境配置,用","配置。将想到的一些记在这,备忘。","配置一对一的配置类,如:serviceconfig","配置一致性","配置也存在“重复代码”,也存在“泛化与精化”的问题。比如:dubbo","配置会比较方便,因为树结构的配置表现力更强。如果非常复杂,也可以考自定义","配置会比较方便,因为都是一些离散的简单值,用","配置分类","配置加载","配置加载。用户感觉非常不便,所以在新版本中进行了合并,统一放到","配置加载,一部分从","配置加载,也增加了配置的灵活性。","配置可以减少配置的学习成本。","配置向后兼容","配置总会隐含一些风格或潜规则,应尽可能保持其一致性。比如:很多功能都有开关,然后有一个配置值:","配置格式","配置的可编程性是非常必要的,不管你以何种方式加载配置文件,都应该提供一个编程的配置方式,允许用户不使用配置文件,直接用代码完成配置过程。因为一个产品,尤其是组件类产品,通常需要和其它产品协作使用,当用户集成你的产品时,可能需要适配配置方式。","配置的比较普遍,而且","配置的缺省值,通常是设置一个常规环境的合理值,这样可以减少用户的配置量。通常建议以线上环境为参考值,开发环境可以通过修改配置适应。缺省值的设置,最好在最外层的配置加载就做处理。程序底层如果发现配置不正确,就应该直接报错,容错在最外层做。如果在程序底层使用时,发现配置值不合理,就填一个缺省值,很容易掩盖表面问题,而引发更深层次的问题。并且配置的中间传递层,很可能并不知道底层使用了一个缺省值,一些中间的检测条件就可能失效。dubbo","配置继承","配置缺省值","配置覆盖","配置设计","配置进行扩展与集成,新版本改成用","配置,支持","配置,比如:log4j.properties,velocity.properties等。产品在初始化时,自动从","采用了方法超时继承服务超时,服务超时再继承缺省超时,没配置时,一层层向上查找。","隔离时,可能找不到配置,并且,当用户希望将配置放到统一的目录时,不太方便。","首先,配置的用途是有多种的,大致可以分为:","驱动等,都是采用这种方式。参见:serviceprovid",",",",并且属性也一对一,这样有利于文件配置与编程配置的一致性理解,减少学习成本。",",所以这个地方,dubbo"],"principals/robustness.html":["1","10","100","3","8.5","b","client","down)下来。","dubbo","error","exectorservic","http://oldratlee.com/380/tech/java/robust","implement.html","ip、使用的是哪个注册中心;调用的是哪个服务、哪个方法等等。这些信息如果不给出,那么事后人工收集的,问题过后现场可能已经不能复原,加大排查问题的难度。","log","server","warn","上一点的子问题。dubbo","严格约定warn、error级别记录的内容","中碰到有两个相关的场景。","中,饱和策略是丢弃数据,等待结果也只是请求的超时。","会同时接收事件,而去重连另一个注册中心。client","会被清除。数据库正常时,这个机制运行良好。但是数据库负荷高时,其上的每个操作都会很慢。这就出现:","作为远程服务暴露、调用和治理的解决方案,是应用运转的经络,其本身实现健壮性的重要程度是不言而喻的。","出问题时的现场信息,即排查问题要用到的信息。如服务调用失败时,要给出使用","分钟、第三次","分钟。","分钟,把重连分散开。","分钟,第二次","发现自己数据被删除时(写入失败),选择等待这段时间再重试。重试时间可以选择指数级增长,如第一次等","发现自己的数据没有了,重新写入自己的数据的反复操作。这些反复的操作又加重了数据库的负荷,恶化问题。","可以使用下面逻辑:","同一个或是一类异常日志连续出现几十遍的情况,还是常常能看到的。人眼很容易漏掉淹没在其中不一样的重要日志信息。要尽量避免这种情况。在可以预见会出现的情况,有必要加一些逻辑来避免。","同一个或是一类问题不要重复记录多次","哪些是关键信息呢?","在","如为一个问题准备一个标志,出问题后打日志后设置标志,避免重复打日志。问题恢复后清除标志。","如果可能,给出问题的原因和解决方法。这让维护和问题解决变得简单,而不是寻求精通者(往往是实现者)的帮助。","如果确保进入集合的元素是可控的且是足够少,则可以放心使用。这是大部分的情况。如果不能保证,则使用有有界的集合。当到达界限时,选择一个合适的丢弃策略。","字串就报警,又尽量减少了发生。过多的报警会让人疲倦,使人对报警失去警惕性,使","容错","当","当一个注册中心停机时,其它的","恢复","数据库上的活锁","数量相对比较多,会对注册中心造成冲击。避免方法可以是","日志","日志中,尽量多的收集关键信息","日志失去意义。再辅以人工定期查看","日志是发现问题、查看问题一个最常用的手段。日志质量往往被忽视,没有日志使用上的明确约定。重视","有了这样的约定,监管系统发现日志文件的中出现","服务消息者从注册中心拿到提供者列表后,会保存提供者列表到内存和磁盘文件中。这样注册中心宕后消费者可以正常运转,甚至可以在注册中心宕机过程中重启消费者。消费者启动时,发现注册中心不可用,会读取保存在磁盘文件中提供者列表。重试逻辑保证注册中心恢复后,更新信息。","服务的消费者","注册中心会定时更新数据库一条记录的时间戳,这样集群中其它的注册中心感知它是存活。过期注册中心和它的相关数据","注册中心认为","用到的原则和方法。","界限设置","的任务等待队列使用有限队列,避免资源耗尽。当任务等待队列饱和时,选择一个合适的饱和策略。这样保证平滑劣化。","的使用,提高","的信息浓度。日志过多、过于混乱,会导致有用的信息被淹没。","的数据。","的服务注册中心","的版本、服务提供者的","目前服务注册中心使用了数据库来保存服务提供者和消费者的信息。注册中心集群不同注册中心也通过数据库来之间同步数据,以感知其它注册中心上提供者。注册中心会内存中保证一份提供者和消费者数据,数据库不可用时,注册中心独立对外正常运转,只是拿不到其它注册中心的数据。当数据库恢复时,重试逻辑会内存中修改的数据写回数据库,并拿到数据库中新数据。","端用于处理请求的","等等。不要因为外部的请求、数据不受限的而崩溃。","级别信息,以评估系统的“亚健康”程度。","线程池(exectorservice)的大小和饱和策略","虽然有点麻烦,但是这样做保证日志信息浓度,让监控更有效。","表示可以恢复的问题,无需人工介入。","表示需要人工介入问题。","要有效利用这个工具要注意:","设置上限。executorservic","设计实现的健壮性","资源是有限的,cpu、内存、io","达到饱和时,说明已经达到服务提供方的负荷上限,要在饱和策略的操作中日志记录这个问题,以发出监控警报。记得注意不要重复多次记录哦。(注意,缺省的饱和策略不会有这些附加的操作。)根据警报的频率,已经决定扩容调整等等,避免系统问题被忽略。","过期,删除","这样操作减少后,保证数据库可以冷却(cool","这里列出一些","重试","重试延迟策略","重连时随机延时","重连注册中心","集合容量","高可用组件要容忍其依赖组件的失败。"],"principals/dummy.html":["!","!=","\"","\"$deploy_home\"","\"$dump_pids\"","\".\\c\"","\".class\");","\"2.0.0\");","\"dump","\"ok!\"","\"the","$0`","$2}'`","$dump_dat","$dump_dir","$dump_dir/free.dump","$dump_dir/iostat.dump","$dump_dir/jinfo","$dump_dir/jmap","$dump_dir/jstack","$dump_dir/jstat","$dump_dir/lsof","$dump_dir/mpstat.dump","$dump_dir/netstat.dump","$dump_dir/sar.dump","$dump_dir/uptime.dump","$dump_dir/vmstat.dump","$dump_pid","$dump_root","$host_nam","$java_home/bin/jinfo","$java_home/bin/jmap","$java_home/bin/jstack","$java_home/bin/jstat","$pid","$pid.dump","&amp;&amp;","&gt;","'/')","'{print","(file","(files.size()","(matcher.find()","(throwabl","(url","(urls.hasmoreelements())","(version","+","+%y%m%d%h%m%s`","......,多好的同学,看到错误的人复制一下就完事了,我们该学学。可以把常见的错误故意犯一遍,看看错误信息能否自我搞定问题,","...\\c\"","//","/bin/netstat","/usr/bin/fre","/usr/bin/iostat","/usr/bin/mpstat","/usr/bin/sar","/usr/bin/uptim","/usr/bin/vmstat","/usr/sbin/lsof","0","0)","1)","10.20.130.20","10.20.130.20:20880","10.20.16.3","1000","1;","20880","2>&1","50","8.6","9\\\\.\\\\","9][0",":",";","=","==",">","?","[","]*)\\\\.jar\");","];","appop","b","c","catch","checkduplicate(class","checkduplicate(cls.getname().replace('.',","checkduplicate(str","class","classpath","cls)","cls,","cls.getpackage().getimplementationversion();","cls.getpackage().getspecificationversion();","cls.getprotectiondomain().getcodesource().getlocation().getfile();","context","d","defaultvers","defaultversion)","defaultversion;","delegate.error(msg","deploy_home=`dirnam","done","dump","dump_date=`d","dump_dir=$dump_root/dump","dump_pids=`p","dump_root=$output_home/dump","dump,进行自动备份,这样就不会有人为疏忽。dump脚本示例:","duplic","duplicate()","duplicate.checkduplicate(\"xxx.properties\");","duplicate.checkduplicate(xxx.class);","e","e)","e);","echo","enumer","error(str","exit","f","fail","failed?","fi","file","file.endswith(\".jar\"))","file.length()","files);","files.add(file);","files.size()","final","gccapac","gcutil","getbean","getversion(){","getversion(class","getversion(version.class,","grep","hashset();","head","heap","histo","host_name=`hostname`","http://javatar.iteye.com/blog/804187","inetaddress.getlocalhost()","ip","jar","java","java_home=/usr/java","kill","logger","logger.error(\"dupl","logger.error(e.getmessage(),","loggerfactory.getlogger(version.class);","matcher","matcher.group(1);","matcher.groupcount()","mkdir","msg,","new","null","null)","output_home=~/output","p","path","path)","pattern","pattern.compile(\"([0","pid","privat","public","r","return","sa","server","session","set","spring","started!\"","static","string","t","telnet","thread.currentthread().getcontextclassloader().getresources(path);","throwabl","tri","url","url.getfile();","urls.nextelement();","us","version","version()","version.getversion(),","version.length()","version;","version_pattern","version_pattern.matcher(file);","void","web","web.xml","width","z","{","{}","|","|awk","||","}","下放一个约定的配置,如果项目中有多个,通常会取jvm加载的第一个,为了不被这么低级的问题折腾,和上面的重复jar包一样,在配置加载的地方,加上:","中加入:","之前先","之间的网络不通,请在","什么原因","会报一个错,错误信息写着:请在","使用","出错?","到","加载,如果在","包中挑一个一定会加载的类,加上重复类检查,给个示例:","在classpath搜文件","在给应用排错时,最怕的就是那种只有简单的一句错误描述,啥信息都没有的异常信息。比如上次碰到一个","在重启前,先手工将出错现场所有数据备份一下,所以最好在","多个项目在使用,每天都要去帮应用查问题,来来回回,发现大部分都是配置错误,或者重复的文件或类,或者网络不通等,所以准备在新版本中加入防痴呆设计。估且这么叫吧,可能很简单,但对排错速度还是有点帮助,希望能抛砖引玉,也希望大家多给力,想出更多的防范措施共享出来。","如果manifest.mf规范中没有版本号,基于jar包名获取版本号","如果有多个,就表示重复","开通访问权限\"","异常信息给出解决方案","异常,就这几个单词,啥都没有,哪个","必填配置估计大家都会检查,因为没有的话,根本没法运行。但对一些可选参数,也应该做一些检查,比如:服务框架允许通过注册中心关联服务消费者和服务提供者,也允许直接配置服务提供者地址点对点直连,这时候,注册中心地址是可选的,但如果没有配点对点直连配置,注册中心地址就一定要配,这时候也要做相应检查。","忽略异常,返回缺省版本号","或者把平时支持应用时遇到的问题及解决办法都写到异常信息里。","日志信息包含环境信息","时","最痴呆的问题,就是有多个版本的相同jar包,会出现新版本的","最近有点痴呆,因为解决了太多的痴呆问题。服务框架实施面超来超广,已有","检查所有可选配置","检查重复工具类:","检查重复的jar包","检查重复的配置文件","段判断是不是跨机房。另外一个例子,是","每次应用一出错,应用的开发或测试就会把出错信息发过来,询问原因,这时候我都会问一大堆套话,用的哪个版本呀?是生产环境还是开发测试环境?哪个注册中心呀?哪个项目中的?哪台机器呀?哪个服务?","每次线上环境一出问题,大家就慌了,通常最直接的办法回滚重启,以减少故障时间,这样现场就被破坏了,要想事后查问题就麻烦了,有些问题必须在线上的大压力下才会发生,线下测试环境很难重现,不太可能让开发或","没有被启动,spring","测试一下网络,如果是跨机房调用,可能是防火墙阻挡,请联系","的","看了都快疯掉,因是线上环境不好调试,而且有些场景不是每次都能重现。异常最基本要带有上下文信息,包括操作者,操作目标,原因等,最好的异常信息,应给出解决方案,比如上面可以给出:\"从","等等,上面甚至可以根据","类,而且和jvm加载顺序有关,问题带有偶然性,误导性,遇到这种莫名其妙的问题,最头疼,所以,第一条,先把它防住,在每个","类,调用了旧版本的","累啊,最主要的是,有些开发或测试人员根本分不清,没办法,只好提供上门服务,浪费的时间可不是浮云,所以,日志中最好把需要的环境信息一并打进去,最好给日志输出做个包装,统一处理掉,免得忘了。包装logger接口如:","脚本之前调用","获取版本号工具类:","返回版本号,如果为空返回缺省版本号","配置文件加载错,也是经常碰到的问题。用户通常会和你说:“我配置的很正确啊,不信我发给你看下,但就是报错”。然后查一圈下来,原来他发过来的配置根本没加载,平台很多产品都会在","防御性容错","防痴呆设计","首先查找manifest.mf规范中的版本号"],"principals/extension.html":["(activ","++;","//","8.7",";",">","abstract","abstractinvok","accesslog,","activ","args)","chain,","chain.invoke(inv);","com.alibaba.xxx.xxxprotocol。dubbo","count,","createexporter(str","createexporter(url","delay,而网站的同学也希望参与进来,加上领域的推动,所以平台计划将部分项目对公司内部开放,让大家一起来实现,dubbo","directori","doinvoke(inv);","doinvoke(invoc","dubbo","echo,","export","export(str","export(url","exporter,","factori","factory、ioc、osgi","failover,","filter","filterchain","generic,","host,","http","http://javatar.iteye.com/blog/1041832","implement","inf/services/","inf/services/com.alibaba.dubbo.rpc.protocol,内容为","int","inv)","invoc","invocation)","invocationhandler,","invok","invoke(invoc","invoke(invok","invoke(method","invoker,","invoker,减少概念。","ioc","jar","jdk","limit","limitfilt","loadbalance,","map,","max)","meta","method,","mock,","monitor,","notify();","object","object[]","ocp","paramet","params);","port,","protect","protocol","public","publish","publisher,","remot","result","rout","route,","router,","routinginvokergroup","routing。所以,将","rpc","rpcexcept","rpcexception;","run?而哪些又是不能踢掉的?基于这样考虑,可以将","serviceload","spi","spring","subscriber,","throw","throwable;","token,","url","url)","url);","wait();","xxx.jar","{","}","一样可以","上面的设计,不自觉的就将","中放置文件:meta","为试点项目之一。","也能复用序列化等实现。这样,需为传输方式,客户端实现,服务器端实现,协议头解析,数据序列化,都留出不同扩展点。","以字符串传递,不停的解析和拼装,没有一个","伪代码","但它们的作用是一样的,只是一个在客户端,一个在服务器端,却采用了不一样的模型类。","但这些都是核心吗?踢掉哪些,rpc","作为","使用一致模型:","保持尽可能少的概念,有助于理解,对于开放的系统尤其重要。另外,各接口都使用一致的概念模型,能相互指引,并减少模型转换,","先看一下","其实都是","再比如,url","再比如,协议扩展,扩展者可能只是想替换序列化方式,或者只替换传输方式,并且","再比如,现有的:invoker,","写死了。","分解成两个层次,只是","包的","即然要扩展,扩展点的加载方式,首先要统一,微核心+插件式,是比较能达到","原则的思路。","原因参见:谈谈扩充式扩展与增量式扩展。","和","实现。","实现,每个功能都是调用链上的一环。","容器。自已造一个小的","容器,也觉得有点过度设计,所以打算采用最简单的","就要留一些扩展点,让参与者尽量黑盒扩展,而不是白盒的修改代码,否则分支,质量,合并,冲突都会很难管理。","并约定所有插件,都必须标注:@extension(\"name\"),作为加载后的标识性名称,用于配置选择。","才是","扩展机制,参见:java.util.serviceloader,也就是扩展者在","扩展点重构","扫描到所有","拆分后,设计如下:","改成:(链式过滤器)","整理后,设计如下:","方式管理插件。","既然要开放,那","时而","最终决定采用的是","标准的","核心的一个扩展,设计如下:","模型类,","每个扩展点的实现者,往往都只是关心一件事,现在的扩展点,并没有完全分离。比如:failover,","比如,invok","比如:(基类模板方法)","没有完全分开,全由","泛化式扩展指:将扩展点逐渐抽象,取所有功能并集,新加功能总是套入并扩充旧功能的概念。","现在很多的逻辑,都是放在基类中实现,然后通过模板方法回调子类的实现,包括:local,","现有","现有功能都当成了核心功能。上面的概念包含了","现有的设计:","由一个插件生命周期管理容器,构成微核心,核心不包括任何功能,这样可以确保所有功能都能被替换,并且,框架作者能做到的功能,扩展者也一定要能做到,以保证平等对待第三方,所以,框架自身的功能也要用插件的方式实现,不能有任何硬编码。","的协议,只需在","的参数,却时而","的所有功能,包括:proxy,","的方法签名为:","的核心。其它,包括","的现有开发人员能实现的需求有限,很多需求都被","的适用面,不想强依赖","目录下放置与接口同名的文本文件,内容为接口实现类名,多个实现类名用换行符分隔。比如,需要扩展","第一步,微核心,插件式,平等对待第三方","第三步,全管道式设计,框架自身逻辑,均使用截面拦截实现","第二步,每个扩展点只封装一个变化因子,最大化复用","第五步,分层,组合式扩展,而不是泛化式扩展","第六步,整理,梳理关系","第四步,最少概念,一致性概念模型","等","等方式管理插件生命周期。考虑","等等,可以全部拆分使用","等,","类包装,","组合式扩展指:将扩展点正交分解,取所有功能交集,新加功能总是基于旧功能之上实现。","而","行为的不同阶段,完全可以抽象掉,统一为","这里面虽然有部分扩展接口,但并不能很好的协作,而且扩展点的加载和配置都没有统一处理,所以下面对它进行重构。","通常微核心都会采用","通过","都不核心,而是","随着服务化的推广,网站对dubbo服务框架的需求逐渐增多,dubbo"],"release.html":["2","2.4.x","2.4.x。是","2.5.x","2.5.x。加新功能的版本,会给对新功能有需求的应用试用。","2.6.0,作为新功能开发版本。","9","bug","bugfix","bugfix,升级第三位版本号。","bugfix,推广使用此版本。如何可行,可以推进应用在期望的时间点内升级到","fix","ga","不会版本过多,导致开发和维护成本剧增","不再开发,应用碰到","个版本并行开发","从","优势","会火速","使用如下的版本开发模式来保障两者。","保持","发现的问题。","只会作","和","在","够稳定后:","定期升级版本用户带来了不安。这是一个假命题,说明如下:","对产品都很重要。但是添加新功能会影响稳定性,dubbo","成为","拉成分支","新功能可以高版本中快速响应,并让应用能试用新功能。","新功能版本:高版本,比如","新功能的开发","版本。","版本前有试用阶段","版本是稳定的!因为:","版本有","版本管理","版本(可以跨了多个版本)定期升级平摊风险(类似小步快跑)。经历过周期长的大项目的同学会有这样的经历,三方库版本长时间不升级,结果出了问题不得不升级到新版本(跨了多个版本)风险巨大。","版本,以","版本,只","版本,所以用户需要积极跟进升级到","版本,线上使用的版本,只会","版本:低版本,比如","用户要配合的职责","由于开发只会","的新功能基本稳定后,进入","相对出问题才升级到","稳定性的提高","经过一个试用阶段保持稳定。","让直接升级。(这个称为“夕阳条款”)","试用阶段。找足够多的应用试用"],"contribution.html":["0%","02","04","10","20%","2012","27","30","90%","ac","avro","bug,或修改框架本身,可以从","cacti","cglib","dubb","dubbo","fork","github","ic","jcr/jsr283","jms&activemq","jmx","jndi","jrobin","json","jsr140&slp","jsr181&cxf(webservice)","jsr311&jsr339(restfulwebservice)","jta/xa分布式事务","ldap","logstash","maven","nagio","protobuf","push","request","rpc","simpledeploy","simpleschedul","snmp","subvers","thrift","uddi","xml","xsocket","《开发指南》翻译","《用户指南》翻译","上","任务","优先级","传输扩展","低","修改后通过","分类","功能","功能单元测试","动态代理扩展","协议扩展","反馈修改。","如果是扩展功能,直接新增工程,黑盒依赖","如果是改","工程。","已认领","序列化扩展","开发完成","待定","性能基准测试","扩展点兼容性测试","拦截扩展","文档","服务安装包仓库","未认领","本地部署代理","朱启恒","注册中心扩展","流程","测试","状态","白文志","的","监控中心扩展","罗立树","计划完成时间","认领者","调研","贡献","资源调度器","进度","进行扩展。","闾刚","高"],"checklist.html":["11","bug","chang","check","checklist","code","code(正常流程/异常流程)","find","jira","list","owner","owner,确保","partner","patternercheck","scope","svn","test","ticket","代码注释写清楚,用中文无妨","以上内容都写到ticket的评论上","以用户的方式运行一下功能","修复代码前先写测试用例","修复代码前先建","修复时","关联","发布前","发现问题、添加测试(集成测试)复现总是;owner","向","和","契约文档化","完成实现。(保证两方的时间投入","检查列表","每个版本要有","的给予时间保证)","讲一遍逻辑","讲述一遍实现。","过一遍","需要伙伴检查"],"code-smell.html":["\"dubbo\"))","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},表示先在","\"script\"))","\"script\")).addparameter(\"type\",","#","$adp","()","(称为幽灵连接),","1.","12","2.","3.","4.","5.",";","==",">provid","@adapt","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@extens","adapt","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","arg1,","arg2);","attach","b","callback","car","class","codec","com.alibaba.dubbo.xxx.yyyinvokerwrapp","connect","consum","default","destroy","dubbo","dubbocodec","dubboprotocol","export","export(dubbo://provid","export(registry://registri","exporter,此处用于","extens","extension\");","extensionload","getregistry(dubbo://registri","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","group","id,在获取","if(是否有url类型方法参数?)","if(是否有方法类型上有url属性)","if(获取的url","illegalargumentexception(\"url","illegalstateexception(\"fail","illegalstateexception。如果不设置则缺省使用","implement","interfac","invoc","invok","jvm","key","key1","key2","lazi","lazy连接","loadbal","method!\");","new","notify(dubbo://provid","notify(route://registri","null\");","null)","object,所以将实例方法存储在","onreturn","onreturn/onerror...","packag","path","provid","public","read(file))","refer","refer(dubbo://provid","refer(registry://registri","register(dubbo://provid","run(url","staticmap","sticki","string","string[]","subscribe(dubbo://registri","suffix(file)).addparameter(\"rule\",","tcp","throw","timeout","token","type1","type2","unsupportedoperationexception(\"i","url","url,","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","url,但","valu","value,使用缺省的扩展。如果没有设定缺省扩展,则方法调用会抛出","value,使用缺省的扩展(在接口的","value,则使用","version","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","}","上找","与","中取得回调服务实例的","中实现。此处需要考虑将此逻辑与","中没有支持","中的下一个(如果不是最后一个),避免碰撞。","中的多个服务,共享连接是说","中设定的值)。比如,string[]","中,此处实现需要进行改造。","为了在传输时能够对回调接口实例进行转换,自动暴露与自动引用目前在","主要原理:","主要原理:consum","事件通知","从文件加载路由规则","从文件加载路由规则:","从注册中心订阅服务:","会为扩展点自动生成自适应扩展点类(通过字节码),并将其实例注入。","作为要","使用的","使用该url参数","使用该url属性","信息获取","全部","共享连接","则将","功能","加载扩展点时,会检查扩展点的属性(通过set方法判断),如该属性是扩展点类型,则会注入扩展点对象。因为注入时不能确定使用哪个扩展点(在使用时确定),所以注入的是一个自适应扩展(一个代理)。自适应扩展点调用时,选取一个真正的扩展点,并代理到其上完成调用。dubbo","参数回调","参数(整个扩展点网的上下文信息)。自适应扩展即是从","名。","名;key1","后,在提供者可用的情况下,调用会继续发送到上一次的服务提供者。sticki","后,连接需要关闭,另一方面还需要注意如何避免部分","向注册中心暴露服务:","哪个","在","在一个","在扩展点实现调用该方法,并返回结果。","在根据","坏味道","处于可用状态,则进行后续调用","多个服务调用是通过同一个","如url没有value,则使用缺省扩展点实现。如没有扩展点,","如果","如果所有的服务提供者都不可用,重新遍历整个列表(优先从没有选过的列表中选择),判断是否有可用的服务提供者(选择过程中,不可用的服务提供者可能会恢复到可用状态),如果有,则进行后续调用","如果第一步选择的服务提供者不可用,则从剩余服务提供者列表中继续选择,如果可用,进行后续调用","如果第三步没有选择出可用的服务提供者,会选第一步选出的","存在多个服务提供者的情况下,首先根据","实现细节:","实现细节:参数的传递采用","实现细节:对于同一个地址由于使用了共享连接,那","对应的参数值(实例方法)加入到异步调用的回调列表中。","就需要特别注意,一方面要满足对同一个地址","引用了","当客户端与服务端创建代理时,暂不建立","成的","扩展点的加载","接口","接口做不同的实现。","接口类名的点分隔小写字串。即对于","方法时,判断如果有配置","时不能关闭连接。在实现中采用了引用计数的方案,但为了防范,在连接关闭时,重新建立了一个","时,需要判断是否是回调,如果是回调,会从","是根据调用方法参数(上面有调用哪个扩展点的信息)来选取一个真正的扩展点。","暴露了多个服务,jvm","有多个服务提供者的情况下,配置了","服务分组","服务提供者选择逻辑","服务版本","服务路径","根据@adaptive注解上声明的key的顺序,从url获致value,作为实际扩展点名。","此项功能自动关闭连接重试功能,开启发送重试功能(即发送数据时如果连接已断开,尝试重新建立连接)","没有","注册中心推送路由规则","注册中心路由规则推送:","注册服务地址:","注解使用如下:","注解在方法上说明。","点对点暴露和引用服务","点对点直连服务:","版本","特有功能,默认关闭。","特有功能,默认开启。","生成的自适应扩展点类如下:","用于当出现异常场景时,避免影响业务逻辑的正常调用.","用于避免开启无用的连接.","用来确定使用哪个扩展点,这个信息通过的","由于自适应扩展点的上面的约定,extensionload","的","的缺省值为","的长连接上,自动在","直接暴露服务:","确定要调用哪个扩展点实现。url","端便可反向调用到","端可以对同一个","端暴露一个服务(实现方法参数上声明的接口a),provid","端的接口实例。","策略","策略默认开启了连接的","给定所有的扩展点上调用都有","自适应扩展点","获取注册中心:","获取路由器:","订阅服务地址:","设计或实现不优雅的地方。","调用参数","调用超时","转换","这些","这里记录的是","进行选择,如果选择的","选项,","通知服务地址:","通过注册中心引用服务","通过注册中心暴露服务","逻辑分离。","都没有","长连接进行数据传输,已达到减少服务端连接数的目的.","长连接,当有数据请求时在做连接初始化。","验证令牌"],"TCK.html":["(technolog","13","cdi","compat","dubbo","final/html/introduction.html","jboss","kit),用户增加一种扩展实现,只需通过","protocol","registri","tck","tck,做一个","tck,即可确保与框架的其它部分兼容运行,可以有效提高整体健状性,也方便第三方扩展者接入,加速开源社区的成熟。","todo","参见:http://docs.jboss.org/cdi/tck/reference/1.0.1","基础框架,在此之上实现","如果大家有兴趣,也可以一起研究,和行知一块讨论。","开源社区的行知同学已着手研究这一块,他的初步想法是借鉴","所以,我们需要对核心扩展点写","技术兼容性测试","用例。","的","的协议,通讯,序列化,注册中心,负载均策等扩展点,都有多种可选策略,以应对不同应用场景,而我们的测试用例很分散,当用户自己需要加一种新的实现时,总是不确定能否满足扩展点的完整契约。","的扩展点"]},"length":47},"tokenStore":{"root":{"0":{"2":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"4":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}},"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0071174377224199285}}},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.11363636363636363}}}},"1":{"0":{"0":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}},"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464},"contribution.html":{"ref":"contribution.html","tf":5}},".":{"2":{"0":{"docs":{},".":{"1":{"3":{"0":{"docs":{},".":{"2":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},":":{"2":{"0":{"8":{"8":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"6":{"docs":{},".":{"3":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"1":{"docs":{"checklist.html":{"ref":"checklist.html","tf":5}}},"2":{"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"code-smell.html":{"ref":"code-smell.html","tf":5}}},"3":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5}}},"docs":{"build.html":{"ref":"build.html","tf":5},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},".":{"5":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}},"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.017094017094017096},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}}},":":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}},",":{"docs":{},"放":{"docs":{},"置":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"2":{"0":{"1":{"2":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.011363636363636364}}},"docs":{}},"8":{"8":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}},"docs":{}},"docs":{},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"7":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}},"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"design.html":{"ref":"design.html","tf":5},"release.html":{"ref":"release.html","tf":0.014084507042253521}},".":{"2":{"docs":{},".":{"1":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}},"docs":{}}},"4":{"docs":{},".":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}},"。":{"docs":{},"是":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}},"5":{"docs":{},".":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.08450704225352113}},"。":{"docs":{},"加":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"会":{"docs":{},"给":{"docs":{},"对":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"有":{"docs":{},"需":{"docs":{},"求":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"试":{"docs":{},"用":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"6":{"docs":{},".":{"0":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"开":{"docs":{},"发":{"docs":{},"版":{"docs":{},"本":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}},"docs":{}}},"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.017094017094017096},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},">":{"docs":{},"&":{"1":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875}}},"docs":{}}}},"3":{"0":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":5},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"4":{"docs":{"implementation.html":{"ref":"implementation.html","tf":5}},".":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"5":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.333333333333333}},".":{"1":{"0":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":5}}},"1":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5}}},"2":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5}}},"3":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5}}},"4":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5}}},"5":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5}}},"6":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":5}}},"7":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":5}}},"8":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5}}},"9":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":5}}},"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":5}}},"2":{"0":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":3.333333333333333}}},"1":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5}}},"2":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":5}}},"3":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5}}},"4":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":5}}},"5":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":5}}},"6":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5}}},"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":5}}},"3":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5}}},"4":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5}}},"5":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":5}}},"6":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5}}},"7":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5}}},"8":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5}}},"9":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":5}}},"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},",":{"docs":{},"而":{"docs":{},"该":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"6":{"docs":{"contract.html":{"ref":"contract.html","tf":5}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}},"7":{"docs":{"coding.html":{"ref":"coding.html","tf":5}},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},"8":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":5}},".":{"1":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":5}}},"2":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":5}}},"3":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":5}}},"4":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":5}}},"5":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":5}}},"6":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":5}}},"7":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":5}}},"docs":{}}},"9":{"0":{"docs":{},"%":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}},"docs":{"release.html":{"ref":"release.html","tf":5}},"\\":{"docs":{},"\\":{"docs":{},".":{"docs":{},"\\":{"docs":{},"\\":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"]":{"docs":{},"[":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}}}},"docs":{},"d":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"o":{"docs":{"./":{"ref":"./","tf":0.42857142857142855},"build.html":{"ref":"build.html","tf":0.043478260869565216},"design.html":{"ref":"design.html","tf":0.05089820359281437},"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806},"implementation.html":{"ref":"implementation.html","tf":0.025974025974025976},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.030303030303030304},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.04519774011299435},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.05154639175257732},"principals/extension.html":{"ref":"principals/extension.html","tf":0.024896265560165973},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788},"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259},"TCK.html":{"ref":"TCK.html","tf":0.0967741935483871}},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"该":{"docs":{},"约":{"docs":{},"定":{"docs":{},"经":{"docs":{},"常":{"docs":{},"造":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"改":{"docs":{},"为":{"docs":{},"全":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}},"/":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}}}}}}}}}},"b":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},">":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"_":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"=":{"docs":{},"`":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"i":{"docs":{},"r":{"docs":{},"=":{"docs":{},"$":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"=":{"docs":{},"`":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"=":{"docs":{},"$":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"自":{"docs":{},"动":{"docs":{},"备":{"docs":{},"份":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"就":{"docs":{},"不":{"docs":{},"会":{"docs":{},"有":{"docs":{},"人":{"docs":{},"为":{"docs":{},"疏":{"docs":{},"忽":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"示":{"docs":{},"例":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"d":{"docs":{},"u":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"e":{"docs":{},".":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"e":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},".":{"docs":{},"s":{"docs":{},"a":{"docs":{},"y":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},"\"":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"\"":{"docs":{},",":{"docs":{},"剔":{"docs":{},"除":{"docs":{},"添":{"docs":{},"加":{"docs":{},"所":{"docs":{},"有":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"插":{"docs":{},"入":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"y":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"i":{"docs":{},"d":{"docs":{},")":{"docs":{},",":{"docs":{},"删":{"docs":{},"除":{"docs":{},"用":{"docs":{},"户":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"被":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"改":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}},"a":{"docs":{},"y":{"docs":{},",":{"docs":{},"而":{"docs":{},"网":{"docs":{},"站":{"docs":{},"的":{"docs":{},"同":{"docs":{},"学":{"docs":{},"也":{"docs":{},"希":{"docs":{},"望":{"docs":{},"参":{"docs":{},"与":{"docs":{},"进":{"docs":{},"来":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{},"领":{"docs":{},"域":{"docs":{},"的":{"docs":{},"推":{"docs":{},"动":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"平":{"docs":{},"台":{"docs":{},"计":{"docs":{},"划":{"docs":{},"将":{"docs":{},"部":{"docs":{},"分":{"docs":{},"项":{"docs":{},"目":{"docs":{},"对":{"docs":{},"公":{"docs":{},"司":{"docs":{},"内":{"docs":{},"部":{"docs":{},"开":{"docs":{},"放":{"docs":{},",":{"docs":{},"让":{"docs":{},"大":{"docs":{},"家":{"docs":{},"一":{"docs":{},"起":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"`":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087}}}}}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}},"i":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}},"c":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}}},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}}},"w":{"docs":{},"n":{"docs":{},")":{"docs":{},"下":{"docs":{},"来":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"n":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"1":{"docs":{},".":{"1":{"docs":{},".":{"1":{"docs":{},":":{"1":{"2":{"3":{"4":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":10}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"j":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010964912280701754},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008547008547008548},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"e":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"build.html":{"ref":"build.html","tf":0.02608695652173913}}}}}},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}},"k":{"docs":{"design.html":{"ref":"design.html","tf":0.03293413173652695},"implementation.html":{"ref":"implementation.html","tf":0.03896103896103896},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.04182509505703422},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"去":{"docs":{},"掉":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"这":{"docs":{},"样":{"docs":{},"其":{"docs":{},"它":{"docs":{},"人":{"docs":{},"只":{"docs":{},"要":{"docs":{},"关":{"docs":{},"注":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{},"概":{"docs":{},"念":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608}},",":{"docs":{},"那":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"接":{"docs":{},"口":{"docs":{},"通":{"docs":{},"常":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"c":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}}}},"f":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"全":{"docs":{},"限":{"docs":{},"定":{"docs":{},"名":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},":":{"docs":{},"配":{"docs":{},"置":{"docs":{},"名":{"docs":{},"=":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"全":{"docs":{},"限":{"docs":{},"定":{"docs":{},"名":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"用":{"docs":{},"换":{"docs":{},"行":{"docs":{},"符":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588}},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}},"i":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087}},"e":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},":":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}},",":{"docs":{},"在":{"docs":{},"获":{"docs":{},"取":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403}}}},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.04065040650406504},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.08333333333333333},"impls/router.html":{"ref":"impls/router.html","tf":0.05970149253731343},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.05714285714285714},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.017094017094017096},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223}}}}},"e":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}},"o":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198}}}}}}}}},")":{"docs":{},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"s":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"、":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},";":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"、":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"这":{"docs":{},"些":{"docs":{},"信":{"docs":{},"息":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"给":{"docs":{},"出":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"事":{"docs":{},"后":{"docs":{},"人":{"docs":{},"工":{"docs":{},"收":{"docs":{},"集":{"docs":{},"的":{"docs":{},",":{"docs":{},"问":{"docs":{},"题":{"docs":{},"过":{"docs":{},"后":{"docs":{},"现":{"docs":{},"场":{"docs":{},"可":{"docs":{},"能":{"docs":{},"已":{"docs":{},"经":{"docs":{},"不":{"docs":{},"能":{"docs":{},"复":{"docs":{},"原":{"docs":{},",":{"docs":{},"加":{"docs":{},"大":{"docs":{},"排":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},"难":{"docs":{},"度":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"f":{"docs":{},"(":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"类":{"docs":{},"型":{"docs":{},"方":{"docs":{},"法":{"docs":{},"参":{"docs":{},"数":{"docs":{},"?":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"类":{"docs":{},"型":{"docs":{},"上":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"属":{"docs":{},"性":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"的":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"设":{"docs":{},"置":{"docs":{},"则":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"使":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"发":{"docs":{},"的":{"docs":{},"人":{"docs":{},"群":{"docs":{},"。":{"docs":{},"主":{"docs":{},"要":{"docs":{},"涵":{"docs":{},"盖":{"docs":{},"了":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}},"完":{"docs":{},"成":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}}},"通":{"docs":{},"访":{"docs":{},"问":{"docs":{},"权":{"docs":{},"限":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"源":{"docs":{},"社":{"docs":{},"区":{"docs":{},"的":{"docs":{},"行":{"docs":{},"知":{"docs":{},"同":{"docs":{},"学":{"docs":{},"已":{"docs":{},"着":{"docs":{},"手":{"docs":{},"研":{"docs":{},"究":{"docs":{},"这":{"docs":{},"一":{"docs":{},"块":{"docs":{},",":{"docs":{},"他":{"docs":{},"的":{"docs":{},"初":{"docs":{},"步":{"docs":{},"想":{"docs":{},"法":{"docs":{},"是":{"docs":{},"借":{"docs":{},"鉴":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"源":{"docs":{},"码":{"docs":{},"、":{"docs":{},"设":{"docs":{},"计":{"docs":{},"有":{"docs":{},"兴":{"docs":{},"趣":{"docs":{},"的":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"有":{"docs":{},"意":{"docs":{},"愿":{"docs":{},"加":{"docs":{},"入":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":5.008695652173913}}}}},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403},"implementation.html":{"ref":"implementation.html","tf":0.03116883116883117},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.043478260869565216},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.03954802259887006},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572},"TCK.html":{"ref":"TCK.html","tf":0.06451612903225806}},"框":{"docs":{},"架":{"docs":{},"设":{"docs":{},"计":{"docs":{},"、":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"机":{"docs":{},"制":{"docs":{},"、":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"、":{"docs":{},"版":{"docs":{},"本":{"docs":{},"管":{"docs":{},"理":{"docs":{},"、":{"docs":{},"构":{"docs":{},"建":{"docs":{},"等":{"docs":{},"话":{"docs":{},"题":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}},"工":{"docs":{},"程":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}},"厂":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"源":{"docs":{},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},"和":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},"上":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"以":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"易":{"docs":{},"程":{"docs":{},"度":{"docs":{},",":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"性":{"docs":{},"。":{"docs":{},"至":{"docs":{},"于":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"自":{"docs":{},"动":{"docs":{},"性":{"docs":{},",":{"docs":{},"可":{"docs":{},"重":{"docs":{},"复":{"docs":{},"性":{"docs":{},",":{"docs":{},"非":{"docs":{},"偶":{"docs":{},"然":{"docs":{},"性":{"docs":{},",":{"docs":{},"无":{"docs":{},"序":{"docs":{},"性":{"docs":{},",":{"docs":{},"完":{"docs":{},"备":{"docs":{},"性":{"docs":{},"(":{"docs":{},"全":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},")":{"docs":{},",":{"docs":{},"轻":{"docs":{},"量":{"docs":{},"性":{"docs":{},"(":{"docs":{},"可":{"docs":{},"快":{"docs":{},"速":{"docs":{},"执":{"docs":{},"行":{"docs":{},")":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"层":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"不":{"docs":{},"包":{"docs":{},"含":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"点":{"docs":{},"都":{"docs":{},"可":{"docs":{},"被":{"docs":{},"用":{"docs":{},"户":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"所":{"docs":{},"替":{"docs":{},"换":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}},"抽":{"docs":{},"象":{"docs":{},",":{"docs":{},"它":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"扩":{"docs":{},"展":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"核":{"docs":{},"心":{"docs":{},"模":{"docs":{},"型":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"模":{"docs":{},"型":{"docs":{},"都":{"docs":{},"向":{"docs":{},"它":{"docs":{},"靠":{"docs":{},"扰":{"docs":{},",":{"docs":{},"或":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{},"它":{"docs":{},",":{"docs":{},"它":{"docs":{},"代":{"docs":{},"表":{"docs":{},"一":{"docs":{},"个":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"体":{"docs":{},",":{"docs":{},"可":{"docs":{},"向":{"docs":{},"它":{"docs":{},"发":{"docs":{},"起":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{},"中":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},",":{"docs":{},"在":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"集":{"docs":{},"群":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"只":{"docs":{},"使":{"docs":{},"用":{"docs":{},"这":{"docs":{},"两":{"docs":{},"层":{"docs":{},"完":{"docs":{},"成":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"其":{"docs":{},"它":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"老":{"docs":{},"病":{"docs":{},"死":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"都":{"docs":{},"自":{"docs":{},"己":{"docs":{},"做":{"docs":{},"了":{"docs":{},",":{"docs":{},"外":{"docs":{},"部":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"或":{"docs":{},"集":{"docs":{},"成":{"docs":{},"都":{"docs":{},"无":{"docs":{},"能":{"docs":{},"为":{"docs":{},"力":{"docs":{},"。":{"docs":{},"好":{"docs":{},"的":{"docs":{},"办":{"docs":{},"法":{"docs":{},"是":{"docs":{},"让":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"或":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"把":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"的":{"docs":{},"是":{"docs":{},"将":{"docs":{},"多":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"不":{"docs":{},"那":{"docs":{},"么":{"docs":{},"透":{"docs":{},"明":{"docs":{},",":{"docs":{},"不":{"docs":{},"那":{"docs":{},"么":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"像":{"docs":{},"调":{"docs":{},"本":{"docs":{},"地":{"docs":{},"服":{"docs":{},"务":{"docs":{},"一":{"docs":{},"样":{"docs":{},"调":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"方":{"docs":{},"便":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"基":{"docs":{},"类":{"docs":{},"支":{"docs":{},"持":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"下":{"docs":{},"问":{"docs":{},"题":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"协":{"docs":{},"议":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"在":{"docs":{},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"头":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"不":{"docs":{},"同":{"docs":{},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"或":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"在":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"通":{"docs":{},"讯":{"docs":{},",":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"策":{"docs":{},"等":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"都":{"docs":{},"有":{"docs":{},"多":{"docs":{},"种":{"docs":{},"可":{"docs":{},"选":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"以":{"docs":{},"应":{"docs":{},"对":{"docs":{},"不":{"docs":{},"同":{"docs":{},"应":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"而":{"docs":{},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"很":{"docs":{},"分":{"docs":{},"散":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"自":{"docs":{},"己":{"docs":{},"需":{"docs":{},"要":{"docs":{},"加":{"docs":{},"一":{"docs":{},"种":{"docs":{},"新":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"时":{"docs":{},",":{"docs":{},"总":{"docs":{},"是":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"能":{"docs":{},"否":{"docs":{},"满":{"docs":{},"足":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"完":{"docs":{},"整":{"docs":{},"契":{"docs":{},"约":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"中":{"docs":{},"要":{"docs":{},"注":{"docs":{},"入":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},",":{"docs":{},"要":{"docs":{},"用":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}},"加":{"docs":{},"载":{"docs":{},"从":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"实":{"docs":{},"现":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"类":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"支":{"docs":{},"持":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}},"人":{"docs":{},",":{"docs":{},"确":{"docs":{},"实":{"docs":{},"容":{"docs":{},"易":{"docs":{},"给":{"docs":{},"搞":{"docs":{},"混":{"docs":{},"了":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},",":{"docs":{},"却":{"docs":{},"时":{"docs":{},"而":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"标":{"docs":{},"签":{"docs":{},",":{"docs":{},"都":{"docs":{},"统":{"docs":{},"一":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"转":{"docs":{},"化":{"docs":{},"。":{"docs":{},"接":{"docs":{},"下":{"docs":{},"来":{"docs":{},"就":{"docs":{},"是":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},",":{"docs":{},"上":{"docs":{},"图":{"docs":{},"中":{"docs":{},"的":{"docs":{},"红":{"docs":{},"色":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{},"下":{"docs":{},"面":{"docs":{},"我":{"docs":{},"们":{"docs":{},"以":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"版":{"docs":{},"本":{"docs":{},"等":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"、":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}},"简":{"docs":{},"洁":{"docs":{},"性":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"微":{"docs":{},"核":{"docs":{},"是":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956}}}}},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},"转":{"docs":{},"交":{"docs":{},"给":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"代":{"docs":{},"码":{"docs":{},"原":{"docs":{},"封":{"docs":{},"不":{"docs":{},"动":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}},"地":{"docs":{},"方":{"docs":{},"无":{"docs":{},"视":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},"场":{"docs":{},"景":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"了":{"docs":{},"一":{"docs":{},"下":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"不":{"docs":{},"管":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"依":{"docs":{},"赖":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},"值":{"docs":{},"中":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"竖":{"docs":{},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"多":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"表":{"docs":{},"示":{"docs":{},"多":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},"设":{"docs":{},"置":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"可":{"docs":{},"以":{"docs":{},"设":{"docs":{},"置":{"docs":{},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{},"但":{"docs":{},"很":{"docs":{},"多":{"docs":{},"服":{"docs":{},"务":{"docs":{},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"求":{"docs":{},"每":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"都":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"是":{"docs":{},"不":{"docs":{},"现":{"docs":{},"实":{"docs":{},"的":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"项":{"docs":{},"目":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}},"任":{"docs":{},"务":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"使":{"docs":{},"用":{"docs":{},"有":{"docs":{},"限":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"资":{"docs":{},"源":{"docs":{},"耗":{"docs":{},"尽":{"docs":{},"。":{"docs":{},"当":{"docs":{},"任":{"docs":{},"务":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"时":{"docs":{},",":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"保":{"docs":{},"证":{"docs":{},"平":{"docs":{},"滑":{"docs":{},"劣":{"docs":{},"化":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"信":{"docs":{},"息":{"docs":{},"浓":{"docs":{},"度":{"docs":{},"。":{"docs":{},"日":{"docs":{},"志":{"docs":{},"过":{"docs":{},"多":{"docs":{},"、":{"docs":{},"过":{"docs":{},"于":{"docs":{},"混":{"docs":{},"乱":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"有":{"docs":{},"用":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"被":{"docs":{},"淹":{"docs":{},"没":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}},"服":{"docs":{},"务":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"方":{"docs":{},"法":{"docs":{},"签":{"docs":{},"名":{"docs":{},"为":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}},"现":{"docs":{},"有":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"能":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},"有":{"docs":{},"限":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"需":{"docs":{},"求":{"docs":{},"都":{"docs":{},"被":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}},"适":{"docs":{},"用":{"docs":{},"面":{"docs":{},",":{"docs":{},"不":{"docs":{},"想":{"docs":{},"强":{"docs":{},"依":{"docs":{},"赖":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"基":{"docs":{},"本":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"后":{"docs":{},",":{"docs":{},"进":{"docs":{},"入":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}},"给":{"docs":{},"予":{"docs":{},"时":{"docs":{},"间":{"docs":{},"保":{"docs":{},"证":{"docs":{},")":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},"为":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"长":{"docs":{},"连":{"docs":{},"接":{"docs":{},"上":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"这":{"docs":{},"篇":{"docs":{},"文":{"docs":{},"档":{"docs":{},"的":{"docs":{},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{},"是":{"docs":{},"对":{"docs":{"./":{"ref":"./","tf":0.14285714285714285}}}}}}}}}}}},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},"在":{"docs":{},"下":{"docs":{},"面":{"docs":{},"一":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"是":{"docs":{},"契":{"docs":{},"约":{"docs":{},"式":{"docs":{},"设":{"docs":{},"计":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"有":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"查":{"docs":{},"询":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"样":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"从":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"拿":{"docs":{},"到":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"己":{"docs":{},"定":{"docs":{},"好":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"后":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"从":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"上":{"docs":{},"从":{"docs":{},"最":{"docs":{},"外":{"docs":{},"层":{"docs":{},"传":{"docs":{},"入":{"docs":{},"。":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"在":{"docs":{},"配":{"docs":{},"置":{"docs":{},"传":{"docs":{},"递":{"docs":{},"上":{"docs":{},"即":{"docs":{},"是":{"docs":{},"一":{"docs":{},"条":{"docs":{},"总":{"docs":{},"线":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"减":{"docs":{},"少":{"docs":{},"后":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"可":{"docs":{},"以":{"docs":{},"冷":{"docs":{},"却":{"docs":{},"(":{"docs":{},"c":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},"里":{"docs":{},"带":{"docs":{},"来":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}},"记":{"docs":{},"录":{"docs":{},"的":{"docs":{},"是":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"的":{"docs":{},"可":{"docs":{},"测":{"docs":{},"性":{"docs":{},"主":{"docs":{},"要":{"docs":{},"指":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}},"靠":{"docs":{},"是":{"docs":{},"狭":{"docs":{},"义":{"docs":{},"的":{"docs":{},"指":{"docs":{},"是":{"docs":{},"否":{"docs":{},"会":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"或":{"docs":{},"引":{"docs":{},"起":{"docs":{},"状":{"docs":{},"态":{"docs":{},"不":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},",":{"docs":{},"写":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"讲":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"防":{"docs":{},"御":{"docs":{},",":{"docs":{},"指":{"docs":{},"的":{"docs":{},"是":{"docs":{},"对":{"docs":{},"非":{"docs":{},"必":{"docs":{},"须":{"docs":{},"途":{"docs":{},"径":{"docs":{},"上":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"进":{"docs":{},"行":{"docs":{},"最":{"docs":{},"大":{"docs":{},"限":{"docs":{},"度":{"docs":{},"的":{"docs":{},"容":{"docs":{},"忍":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"程":{"docs":{},"序":{"docs":{},"上":{"docs":{},"的":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"要":{"docs":{},"讲":{"docs":{},"一":{"docs":{},"个":{"docs":{},"事":{"docs":{},"件":{"docs":{},"和":{"docs":{},"上":{"docs":{},"面":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},",":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"是":{"docs":{},"干":{"docs":{},"预":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"过":{"docs":{},"程":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"事":{"docs":{},"件":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"状":{"docs":{},"态":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},",":{"docs":{},"任":{"docs":{},"何":{"docs":{},"行":{"docs":{},"为":{"docs":{},"改":{"docs":{},"变":{"docs":{},"的":{"docs":{},"相":{"docs":{},"同":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"对":{"docs":{},"事":{"docs":{},"件":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"一":{"docs":{},"致":{"docs":{},"的":{"docs":{},"。":{"docs":{},"事":{"docs":{},"件":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"事":{"docs":{},"后":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"列":{"docs":{},"出":{"docs":{},"一":{"docs":{},"些":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"面":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"有":{"docs":{},"部":{"docs":{},"分":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"但":{"docs":{},"并":{"docs":{},"不":{"docs":{},"能":{"docs":{},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"协":{"docs":{},"作":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"加":{"docs":{},"载":{"docs":{},"和":{"docs":{},"配":{"docs":{},"置":{"docs":{},"都":{"docs":{},"没":{"docs":{},"有":{"docs":{},"统":{"docs":{},"一":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"下":{"docs":{},"面":{"docs":{},"对":{"docs":{},"它":{"docs":{},"进":{"docs":{},"行":{"docs":{},"重":{"docs":{},"构":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"种":{"docs":{},"典":{"docs":{},"型":{"docs":{},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}},"是":{"docs":{},"我":{"docs":{},"最":{"docs":{},"不":{"docs":{},"喜":{"docs":{},"欢":{"docs":{},"看":{"docs":{},"到":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"在":{"docs":{},"核":{"docs":{},"心":{"docs":{},"框":{"docs":{},"架":{"docs":{},"中":{"docs":{},",":{"docs":{},"我":{"docs":{},"更":{"docs":{},"愿":{"docs":{},"看":{"docs":{},"到":{"docs":{},"信":{"docs":{},"息":{"docs":{},"详":{"docs":{},"细":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"不":{"docs":{},"合":{"docs":{},"法":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"这":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"健":{"docs":{},"状":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"在":{"docs":{},"写":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"都":{"docs":{},"应":{"docs":{},"在":{"docs":{},"潜":{"docs":{},"意":{"docs":{},"识":{"docs":{},"中":{"docs":{},"防":{"docs":{},"止":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"基":{"docs":{},"本":{"docs":{},"上":{"docs":{},"要":{"docs":{},"能":{"docs":{},"确":{"docs":{},"保":{"docs":{},"一":{"docs":{},"次":{"docs":{},"写":{"docs":{},"完":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"在":{"docs":{},"不":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"异":{"docs":{},"常":{"docs":{},"才":{"docs":{},"算":{"docs":{},"合":{"docs":{},"格":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"些":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"$":{"0":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"2":{"docs":{},"}":{"docs":{},"'":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"docs":{},"{":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"}":{"docs":{},"/":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}}}}},"docs":{}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"}":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"i":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"/":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"i":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"j":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"l":{"docs":{},"s":{"docs":{},"o":{"docs":{},"f":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"m":{"docs":{},"p":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"j":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},">":{"docs":{"build.html":{"ref":"build.html","tf":0.02608695652173913},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.026690391459074734},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"b":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.041237113402061855},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"u":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"g":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043},"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},",":{"docs":{},"不":{"docs":{},"小":{"docs":{},"心":{"docs":{},"改":{"docs":{},"到":{"docs":{},"了":{"docs":{},"这":{"docs":{},"里":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"引":{"docs":{},"爆":{"docs":{},"故":{"docs":{},"障":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"这":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"原":{"docs":{},"则":{"docs":{},"就":{"docs":{},"是":{"docs":{},"永":{"docs":{},"远":{"docs":{},"不":{"docs":{},"要":{"docs":{},"区":{"docs":{},"分":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"获":{"docs":{},"取":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"会":{"docs":{},"通":{"docs":{},"过":{"docs":{},"扫":{"docs":{},"描":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"或":{"docs":{},"修":{"docs":{},"改":{"docs":{},"框":{"docs":{},"架":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"从":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.04225352112676056}},",":{"docs":{},"升":{"docs":{},"级":{"docs":{},"第":{"docs":{},"三":{"docs":{},"位":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"推":{"docs":{},"广":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"版":{"docs":{},"本":{"docs":{},"。":{"docs":{},"如":{"docs":{},"何":{"docs":{},"可":{"docs":{},"行":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"推":{"docs":{},"进":{"docs":{},"应":{"docs":{},"用":{"docs":{},"在":{"docs":{},"期":{"docs":{},"望":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},"内":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{},"m":{"docs":{},"a":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608}}}}}}}},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},":":{"docs":{},"\\":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015350877192982455},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.022598870056497175},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},")":{"docs":{},",":{"docs":{},"就":{"docs":{},"优":{"docs":{},"先":{"docs":{},"将":{"docs":{},"它":{"docs":{},"设":{"docs":{},"计":{"docs":{},"成":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},"。":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},"有":{"docs":{},"天":{"docs":{},"然":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"共":{"docs":{},"享":{"docs":{},"优":{"docs":{},"势":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"同":{"docs":{},"步":{"docs":{},"或":{"docs":{},"复":{"docs":{},"制":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"效":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"分":{"docs":{},"析":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{},"就":{"docs":{},"算":{"docs":{},"是":{"docs":{},"可":{"docs":{},"变":{"docs":{},"类":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"从":{"docs":{},"构":{"docs":{},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"在":{"docs":{},"类":{"docs":{},"中":{"docs":{},"持":{"docs":{},"有":{"docs":{},"时":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"将":{"docs":{},"字":{"docs":{},"段":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.03260869565217391},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.030927835051546393}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.020958083832335328},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}}}},"s":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814}}}}}}}}}},"g":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}},"i":{"docs":{},"n":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}},"(":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}},"d":{"docs":{},"u":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"s":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"'":{"docs":{},".":{"docs":{},"'":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}}}}}}}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"(":{"docs":{},"正":{"docs":{},"常":{"docs":{},"流":{"docs":{},"程":{"docs":{},"/":{"docs":{},"异":{"docs":{},"常":{"docs":{},"流":{"docs":{},"程":{"docs":{},")":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576}}},"y":{"docs":{},";":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333}},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"2":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}},"docs":{}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},".":{"docs":{},"j":{"docs":{},"d":{"docs":{},"k":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"s":{"docs":{},"l":{"docs":{},"f":{"4":{"docs":{},"j":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"j":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}}},"y":{"docs":{},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},".":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"c":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"x":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357}}},"y":{"docs":{},";":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},".":{"docs":{},"r":{"docs":{},"m":{"docs":{},"i":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}},"p":{"docs":{},"c":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}},".":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"r":{"docs":{},"o":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716}}},"y":{"docs":{},";":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}},";":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},".":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"#":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}},"}":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}},"y":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"#":{"docs":{},"l":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},"}":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"y":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},".":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"r":{"docs":{},".":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"2":{"docs":{},"p":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576}},"e":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882}}},"y":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223}}}}}}},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}},"a":{"docs":{},"t":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.011976047904191617}}}}},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.16666666666666666}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015350877192982455}},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"(":{"docs":{},"造":{"docs":{},"车":{"docs":{},"者":{"docs":{},")":{"docs":{},"、":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},")":{"docs":{},",":{"docs":{},"而":{"docs":{},"如":{"docs":{},"果":{"docs":{},"它":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"主":{"docs":{},"流":{"docs":{},"程":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"看":{"docs":{},"到":{"docs":{},"的":{"docs":{},"。":{"docs":{},"但":{"docs":{},"这":{"docs":{},"里":{"docs":{},"要":{"docs":{},"控":{"docs":{},"制":{"docs":{},"个":{"docs":{},"度":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"随":{"docs":{},"意":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"更":{"docs":{},"不":{"docs":{},"要":{"docs":{},"无":{"docs":{},"声":{"docs":{},"无":{"docs":{},"息":{"docs":{},"的":{"docs":{},"吃":{"docs":{},"掉":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"d":{"docs":{},"i":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.028469750889679714}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.02608695652173913}},"e":{"docs":{},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.03202846975088968}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"design.html":{"ref":"design.html","tf":0.005988023952095809},"implementation.html":{"ref":"implementation.html","tf":0.023376623376623377},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"由":{"docs":{},"框":{"docs":{},"架":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"传":{"docs":{},"入":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"心":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"幂":{"docs":{},"等":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"两":{"docs":{},"次":{"docs":{},",":{"docs":{},"和":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"一":{"docs":{},"次":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}},",":{"docs":{},"此":{"docs":{},"处":{"docs":{},"用":{"docs":{},"于":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.011976047904191617},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}}}}}}}},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.015350877192982455},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"d":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"o":{"docs":{},"r":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},",":{"docs":{},"那":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"接":{"docs":{},"口":{"docs":{},"通":{"docs":{},"常":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},",":{"docs":{},"原":{"docs":{},"理":{"docs":{},"一":{"docs":{},"样":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"可":{"docs":{},"以":{"docs":{},"任":{"docs":{},"意":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"只":{"docs":{},"是":{"docs":{},"举":{"docs":{},"例":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.015151515151515152},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.030927835051546393}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"y":{"docs":{},"m":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},",":{"docs":{},"集":{"docs":{},"成":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"r":{"docs":{},"i":{"docs":{},"z":{"docs":{},"z":{"docs":{},"l":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"e":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"e":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"s":{"docs":{},"?":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.03125}},"{":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"b":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"e":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}},"i":{"docs":{},"c":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"c":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"a":{"docs":{"release.html":{"ref":"release.html","tf":0.14084507042253522}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"b":{"docs":{"build.html":{"ref":"build.html","tf":0.02608695652173913}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"y":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"b":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"/":{"1":{"0":{"4":{"1":{"8":{"3":{"2":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"6":{"6":{"6":{"4":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"9":{"0":{"8":{"4":{"5":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"0":{"6":{"0":{"9":{"8":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"0":{"4":{"1":{"8":{"7":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"4":{"9":{"5":{"2":{"7":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"e":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"3":{"8":{"0":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},"/":{"docs":{},"r":{"docs":{},"o":{"docs":{},"b":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}},";":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096}}}}}}}}},"s":{"docs":{},"h":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"基":{"docs":{},"于":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"`":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087},"SPI.html":{"ref":"SPI.html","tf":0.010964912280701754},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.01694915254237288},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"v":{"docs":{},"a":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"coding.html":{"ref":"coding.html","tf":0.015151515151515152},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.01694915254237288},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},";":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{"coding.html":{"ref":"coding.html","tf":0.015151515151515152}}}}},"e":{"docs":{},"y":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":0.25}}}},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"/":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"b":{"docs":{},"c":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"r":{"docs":{},"u":{"docs":{},"b":{"docs":{},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"i":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"这":{"docs":{},"就":{"docs":{},"是":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"r":{"1":{"4":{"0":{"docs":{},"&":{"docs":{},"s":{"docs":{},"l":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"docs":{}},"8":{"1":{"docs":{},"&":{"docs":{},"c":{"docs":{},"x":{"docs":{},"f":{"docs":{},"(":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"3":{"1":{"1":{"docs":{},"&":{"docs":{},"j":{"docs":{},"s":{"docs":{},"r":{"3":{"3":{"9":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}},"docs":{}},"docs":{}},"docs":{}}},"v":{"docs":{},"m":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"c":{"docs":{},"r":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"r":{"2":{"8":{"3":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}},"docs":{}},"docs":{}},"docs":{}}}}}}},"m":{"docs":{},"s":{"docs":{},"&":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"m":{"docs":{},"q":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}},"x":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"x":{"docs":{},"a":{"docs":{},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{},"事":{"docs":{},"务":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"a":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}},"m":{"2":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}},"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.043478260869565216},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"_":{"docs":{},"o":{"docs":{},"p":{"docs":{},"t":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},"s":{"docs":{},"=":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"k":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"p":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"认":{"docs":{},"为":{"docs":{},"是":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"写":{"docs":{},"入":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"等":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"认":{"docs":{},"为":{"docs":{},"是":{"docs":{},"不":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"的":{"docs":{},"。":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"必":{"docs":{},"须":{"docs":{},"在":{"docs":{},"写":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},",":{"docs":{},"都":{"docs":{},"注":{"docs":{},"意":{"docs":{},"它":{"docs":{},"的":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"性":{"docs":{},"与":{"docs":{},"否":{"docs":{},",":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"划":{"docs":{},"分":{"docs":{},"开":{"docs":{},",":{"docs":{},"并":{"docs":{},"对":{"docs":{},"失":{"docs":{},"败":{"docs":{},"做":{"docs":{},"异":{"docs":{},"常":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"并":{"docs":{},"为":{"docs":{},"容":{"docs":{},"错":{"docs":{},",":{"docs":{},"自":{"docs":{},"我":{"docs":{},"保":{"docs":{},"护":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"或":{"docs":{},"切":{"docs":{},"换":{"docs":{},"等":{"docs":{},"补":{"docs":{},"偿":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"提":{"docs":{},"供":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"切":{"docs":{},"入":{"docs":{},"点":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"后":{"docs":{},"续":{"docs":{},"增":{"docs":{},"加":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"至":{"docs":{},"于":{"docs":{},"放":{"docs":{},"错":{"docs":{},"位":{"docs":{},"置":{"docs":{},",":{"docs":{},"而":{"docs":{},"导":{"docs":{},"致":{"docs":{},"原":{"docs":{},"先":{"docs":{},"的":{"docs":{},"容":{"docs":{},"错":{"docs":{},"处":{"docs":{},"理":{"docs":{},"陷":{"docs":{},"入":{"docs":{},"混":{"docs":{},"乱":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"docs":{}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}},"v":{"docs":{},"n":{"docs":{"build.html":{"ref":"build.html","tf":0.05217391304347826}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"e":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}},"t":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"!":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}},"t":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"n":{"docs":{},"a":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.017964071856287425},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.046875}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"s":{"docs":{},"g":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"k":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"(":{"docs":{},"[":{"0":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"docs":{}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.023529411764705882},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.01507537688442211},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.02564102564102564},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"t":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.08695652173913043}}}}}}},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.017964071856287425},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.02512562814070352},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}}}},"x":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.014970059880239521},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"代":{"docs":{},"码":{"docs":{},"通":{"docs":{},"过":{"docs":{},"这":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.022598870056497175}}},"y":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"h":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"u":{"docs":{},"r":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"v":{"docs":{},"a":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.008896797153024912}}}}}}},"l":{"docs":{},"u":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"t":{"docs":{},"s":{"2":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"docs":{}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"u":{"docs":{},"s":{"docs":{},"。":{"docs":{},"通":{"docs":{},"常":{"docs":{},"核":{"docs":{},"心":{"docs":{},"是":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"带":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"性":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"和":{"docs":{},"集":{"docs":{},"成":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"各":{"docs":{},"功":{"docs":{},"能":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"交":{"docs":{},"互":{"docs":{},"及":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"任":{"docs":{},"何":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"替":{"docs":{},"换":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"做":{"docs":{},"不":{"docs":{},"到":{"docs":{},"微":{"docs":{},"核":{"docs":{},",":{"docs":{},"至":{"docs":{},"少":{"docs":{},"要":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},",":{"docs":{},"即":{"docs":{},"原":{"docs":{},"作":{"docs":{},"者":{"docs":{},"能":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"应":{"docs":{},"该":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"全":{"docs":{},"部":{"docs":{},"做":{"docs":{},"到":{"docs":{},"。":{"docs":{},"原":{"docs":{},"作":{"docs":{},"者":{"docs":{},"要":{"docs":{},"把":{"docs":{},"自":{"docs":{},"己":{"docs":{},"也":{"docs":{},"当":{"docs":{},"作":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"才":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"可":{"docs":{},"持":{"docs":{},"续":{"docs":{},"性":{"docs":{},"及":{"docs":{},"由":{"docs":{},"内":{"docs":{},"向":{"docs":{},"外":{"docs":{},"的":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.039473684210526314},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.034220532319391636},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.03125},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.05025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.042735042735042736},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.04411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.057692307692307696},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05747126436781609},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05555555555555555},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}}},"s":{"docs":{},"h":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"t":{"docs":{},"(":{"docs":{},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}},"s":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"o":{"docs":{},"j":{"docs":{},"o":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"i":{"docs":{},"d":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"\\":{"docs":{},".":{"docs":{},"m":{"2":{"docs":{},"\\":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}}}},"docs":{}}}}}}}},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}},"e":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"a":{"docs":{},"g":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},",":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},">":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"k":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"p":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.6666666666666665},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.021739130434782608},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.05084745762711865},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"编":{"docs":{},"程":{"docs":{},"接":{"docs":{},"口":{"docs":{},"做":{"docs":{},"了":{"docs":{},"配":{"docs":{},"套":{"docs":{},"方":{"docs":{},"案":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"t":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},"c":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"u":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.04225352112676056},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}},"e":{"docs":{},"d":{"docs":{},"!":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"u":{"docs":{},"b":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"选":{"docs":{},"用":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"保":{"docs":{},"持":{"docs":{},"原":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"不":{"docs":{},"变":{"docs":{},",":{"docs":{},"增":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"o":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.011299435028248588}}}}},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"简":{"docs":{},"化":{"docs":{},"后":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"它":{"docs":{},"的":{"docs":{},"缺":{"docs":{},"点":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"强":{"docs":{},"依":{"docs":{},"赖":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}},"a":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"y":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"r":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"u":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"b":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"q":{"docs":{},"l":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"_":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},"_":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"_":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}},"n":{"docs":{},"m":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"v":{"docs":{},"n":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"b":{"docs":{},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},",":{"docs":{},"隐":{"docs":{},"藏":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"d":{"docs":{},"p":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"d":{"docs":{},"i":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"r":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.03636363636363636},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.019011406844106463},"impls/registry.html":{"ref":"impls/registry.html","tf":0.019943019943019943},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"contract.html":{"ref":"contract.html","tf":0.14285714285714285},"coding.html":{"ref":"coding.html","tf":0.03787878787878788},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"code-smell.html":{"ref":"code-smell.html","tf":0.018867924528301886}},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/registry.html":{"ref":"impls/registry.html","tf":0.008547008547008548},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.020100502512562814},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"先":{"docs":{},"注":{"docs":{},"册":{"docs":{},"到":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"如":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"但":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"全":{"docs":{},"部":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"用":{"docs":{},"\"":{"docs":{},".":{"docs":{},"\"":{"docs":{},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"p":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"s":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}},"d":{"docs":{},"t":{"docs":{},"h":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}},"e":{"docs":{},"b":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806}},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}}}}}}},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"类":{"docs":{},"内":{"docs":{},"容":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"a":{"docs":{},"r":{"docs":{},"n":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.020618556701030927}}}},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}}},"x":{"docs":{},"m":{"docs":{},"x":{"1":{"0":{"2":{"4":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.01694915254237288},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"x":{"docs":{},":":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"=":{"5":{"1":{"2":{"docs":{},"m":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}},"x":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"(":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}},":":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}},":":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}},":":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}},":":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}},":":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}},":":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},",":{"docs":{},"a":{"docs":{},"a":{"docs":{},"a":{"docs":{},",":{"docs":{},"b":{"docs":{},"b":{"docs":{},"b":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}},":":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}},":":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}},":":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}},"e":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}},":":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}},":":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"y":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}},":":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}},":":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{},";":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}},"y":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}},":":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}},":":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},":":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{},";":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},":":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}},",":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},":":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}},":":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}},":":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"基":{"docs":{},"类":{"docs":{},"都":{"docs":{},"命":{"docs":{},"名":{"docs":{},"为":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}},"↩":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087},"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"coding.html":{"ref":"coding.html","tf":0.022727272727272728}}},"上":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"浏":{"docs":{},"览":{"docs":{},"源":{"docs":{},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}},"图":{"docs":{},"是":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},"消":{"docs":{},"费":{"docs":{},"的":{"docs":{},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"面":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"这":{"docs":{},"个":{"docs":{},"类":{"docs":{},"会":{"docs":{},"被":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"不":{"docs":{},"自":{"docs":{},"觉":{"docs":{},"的":{"docs":{},"就":{"docs":{},"将":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}},"发":{"docs":{},"表":{"docs":{},"的":{"docs":{},"系":{"docs":{},"列":{"docs":{},"文":{"docs":{},"章":{"docs":{},"。":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":0.25}}}}}}}}}},"一":{"docs":{},"点":{"docs":{},"的":{"docs":{},"子":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}},"找":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"下":{"docs":{},"的":{"docs":{},"路":{"docs":{},"径":{"docs":{},"是":{"docs":{"build.html":{"ref":"build.html","tf":0.017391304347826087}}}}}},"面":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"我":{"docs":{},"们":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"精":{"docs":{},"简":{"docs":{},"的":{"docs":{},"图":{"docs":{},"来":{"docs":{},"说":{"docs":{},"明":{"docs":{},"最":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"两":{"docs":{},"种":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{},"该":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"很":{"docs":{},"多":{"docs":{},"项":{"docs":{},"目":{"docs":{},"也":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"似":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"s":{"docs":{},"a":{"docs":{},"t":{"docs":{},".":{"docs":{},"x":{"docs":{},"m":{"docs":{},"l":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"接":{"docs":{},"口":{"docs":{},"类":{"docs":{},"全":{"docs":{},"名":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},"每":{"docs":{},"行":{"docs":{},"一":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"类":{"docs":{},"名":{"docs":{},",":{"docs":{},"就":{"docs":{},"像":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"约":{"docs":{},"定":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"项":{"docs":{},"目":{"docs":{},"中":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"取":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"加":{"docs":{},"载":{"docs":{},"的":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"不":{"docs":{},"被":{"docs":{},"这":{"docs":{},"么":{"docs":{},"低":{"docs":{},"级":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"折":{"docs":{},"腾":{"docs":{},",":{"docs":{},"和":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"在":{"docs":{},"配":{"docs":{},"置":{"docs":{},"加":{"docs":{},"载":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"约":{"docs":{},"定":{"docs":{},"一":{"docs":{},"个":{"docs":{},"以":{"docs":{},"项":{"docs":{},"目":{"docs":{},"为":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"中":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"导":{"docs":{},"入":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}},"配":{"docs":{},"置":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"新":{"docs":{},"加":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"是":{"docs":{},"丢":{"docs":{},"弃":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"等":{"docs":{},"待":{"docs":{},"结":{"docs":{},"果":{"docs":{},"也":{"docs":{},"只":{"docs":{},"是":{"docs":{},"请":{"docs":{},"求":{"docs":{},"的":{"docs":{},"超":{"docs":{},"时":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}},"此":{"docs":{},"处":{"docs":{},"实":{"docs":{},"现":{"docs":{},"需":{"docs":{},"要":{"docs":{},"进":{"docs":{},"行":{"docs":{},"改":{"docs":{},"造":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"的":{"docs":{},"任":{"docs":{},"何":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"加":{"docs":{},"密":{"docs":{},"算":{"docs":{},"法":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"引":{"docs":{},"擎":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"新":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"(":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"是":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},")":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"碰":{"docs":{},"撞":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"共":{"docs":{},"享":{"docs":{},"连":{"docs":{},"接":{"docs":{},"是":{"docs":{},"说":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"发":{"docs":{},"送":{"docs":{},"远":{"docs":{},"程":{"docs":{},"请":{"docs":{},"求":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}},"途":{"docs":{},"变":{"docs":{},"更":{"docs":{},"时":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"分":{"docs":{},"开":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"上":{"docs":{},"一":{"docs":{},"个":{"docs":{},"全":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}},"入":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"碰":{"docs":{},"到":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},":":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"取":{"docs":{},"得":{"docs":{},"回":{"docs":{},"调":{"docs":{},"服":{"docs":{},"务":{"docs":{},"实":{"docs":{},"例":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"此":{"docs":{},"处":{"docs":{},"需":{"docs":{},"要":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"将":{"docs":{},"此":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"与":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"支":{"docs":{},"持":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"设":{"docs":{},"定":{"docs":{},"的":{"docs":{},"值":{"docs":{},")":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"[":{"docs":{},"]":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"在":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"通":{"docs":{},"过":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"则":{"docs":{},"会":{"docs":{},"注":{"docs":{},"入":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"代":{"docs":{},"表":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"行":{"docs":{},"为":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"上":{"docs":{},"一":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"复":{"docs":{},"用":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"等":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"需":{"docs":{},"为":{"docs":{},"传":{"docs":{},"输":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"头":{"docs":{},"解":{"docs":{},"析":{"docs":{},",":{"docs":{},"数":{"docs":{},"据":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},",":{"docs":{},"都":{"docs":{},"留":{"docs":{},"出":{"docs":{},"不":{"docs":{},"同":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"仓":{"docs":{},"库":{"docs":{},"。":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},"通":{"docs":{},"过":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}},"代":{"docs":{},"码":{"docs":{},"签":{"docs":{},"出":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"动":{"docs":{},"态":{"docs":{},"生":{"docs":{},"成":{"docs":{},"字":{"docs":{},"节":{"docs":{},"码":{"docs":{},",":{"docs":{},"加":{"docs":{},"速":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"注":{"docs":{},"释":{"docs":{},"写":{"docs":{},"清":{"docs":{},"楚":{"docs":{},",":{"docs":{},"用":{"docs":{},"中":{"docs":{},"文":{"docs":{},"无":{"docs":{},"妨":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}},"表":{"docs":{},"层":{"docs":{},"或":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"的":{"docs":{},"表":{"docs":{},"示":{"docs":{},"与":{"docs":{},"业":{"docs":{},"务":{"docs":{},"有":{"docs":{},"交":{"docs":{},"互":{"docs":{},",":{"docs":{},"绿":{"docs":{},"色":{"docs":{},"的":{"docs":{},"表":{"docs":{},"示":{"docs":{},"只":{"docs":{},"对":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"署":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"拓":{"docs":{},"扑":{"docs":{},"节":{"docs":{},"点":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"理":{"docs":{},"了":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"替":{"docs":{},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"上":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"内":{"docs":{},"容":{"docs":{},"都":{"docs":{},"写":{"docs":{},"到":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"的":{"docs":{},"评":{"docs":{},"论":{"docs":{},"上":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"不":{"docs":{},"停":{"docs":{},"的":{"docs":{},"解":{"docs":{},"析":{"docs":{},"和":{"docs":{},"拼":{"docs":{},"装":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"户":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"运":{"docs":{},"行":{"docs":{},"一":{"docs":{},"下":{"docs":{},"功":{"docs":{},"能":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}},"作":{"docs":{},"为":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"主":{"docs":{},"干":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"分":{"docs":{},"支":{"docs":{},"作":{"docs":{},"为":{"docs":{},"维":{"docs":{},"护":{"docs":{},"版":{"docs":{},"本":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}}}}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{},"工":{"docs":{},"具":{"docs":{},"。":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"统":{"docs":{},"一":{"docs":{},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"都":{"docs":{},"通":{"docs":{},"过":{"docs":{},"传":{"docs":{},"递":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},"贯":{"docs":{},"穿":{"docs":{},"整":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"设":{"docs":{},"计":{"docs":{},"体":{"docs":{},"系":{"docs":{},"。":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}}}},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"、":{"docs":{},"调":{"docs":{},"用":{"docs":{},"和":{"docs":{},"治":{"docs":{},"理":{"docs":{},"的":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"案":{"docs":{},",":{"docs":{},"是":{"docs":{},"应":{"docs":{},"用":{"docs":{},"运":{"docs":{},"转":{"docs":{},"的":{"docs":{},"经":{"docs":{},"络":{"docs":{},",":{"docs":{},"其":{"docs":{},"本":{"docs":{},"身":{"docs":{},"实":{"docs":{},"现":{"docs":{},"健":{"docs":{},"壮":{"docs":{},"性":{"docs":{},"的":{"docs":{},"重":{"docs":{},"要":{"docs":{},"程":{"docs":{},"度":{"docs":{},"是":{"docs":{},"不":{"docs":{},"言":{"docs":{},"而":{"docs":{},"喻":{"docs":{},"的":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}},"使":{"docs":{},"用":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"以":{"docs":{},"下":{"docs":{},"命":{"docs":{},"令":{"docs":{},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}},"来":{"docs":{},"生":{"docs":{},"成":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}},"d":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"接":{"docs":{},"口":{"docs":{},"和":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"一":{"docs":{},"致":{"docs":{},"模":{"docs":{},"型":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"如":{"docs":{},"下":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"开":{"docs":{},"发":{"docs":{},"模":{"docs":{},"式":{"docs":{},"来":{"docs":{},"保":{"docs":{},"障":{"docs":{},"两":{"docs":{},"者":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"该":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"参":{"docs":{},"数":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"属":{"docs":{},"性":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"分":{"docs":{},"支":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}},"布":{"docs":{},"式":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"后":{"docs":{},"续":{"docs":{},"如":{"docs":{},"果":{"docs":{},"维":{"docs":{},"护":{"docs":{},"人":{"docs":{},"员":{"docs":{},"增":{"docs":{},"多":{"docs":{},"或":{"docs":{},"变":{"docs":{},"更":{"docs":{},",":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"质":{"docs":{},"量":{"docs":{},"的":{"docs":{},"下":{"docs":{},"降":{"docs":{},",":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"离":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"可":{"docs":{},"靠":{"docs":{},"操":{"docs":{},"作":{"docs":{},"和":{"docs":{},"不":{"docs":{},"可":{"docs":{},"靠":{"docs":{},"操":{"docs":{},"作":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}},"钟":{"docs":{},"、":{"docs":{},"第":{"docs":{},"三":{"docs":{},"次":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}},",":{"docs":{},"把":{"docs":{},"重":{"docs":{},"连":{"docs":{},"分":{"docs":{},"散":{"docs":{},"开":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}},"第":{"docs":{},"二":{"docs":{},"次":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"解":{"docs":{},"成":{"docs":{},"两":{"docs":{},"个":{"docs":{},"层":{"docs":{},"次":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"类":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"包":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},",":{"docs":{},"方":{"docs":{},"便":{"docs":{},"用":{"docs":{},"来":{"docs":{},"调":{"docs":{},"试":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}},"内":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"这":{"docs":{},"个":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"进":{"docs":{},"行":{"docs":{},"合":{"docs":{},"并":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"文":{"docs":{},"本":{"docs":{},"文":{"docs":{},"件":{"docs":{},":":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"a":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"不":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"括":{"docs":{},"监":{"docs":{},"控":{"docs":{},"在":{"docs":{},"内":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"附":{"docs":{},"加":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"全":{"docs":{},"部":{"docs":{},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"名":{"docs":{},"称":{"docs":{},"抓":{"docs":{},"取":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"是":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"性":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"代":{"docs":{},"码":{"docs":{},"却":{"docs":{},"不":{"docs":{},"少":{"docs":{},",":{"docs":{},"初":{"docs":{},"步":{"docs":{},"测":{"docs":{},"试":{"docs":{},"也":{"docs":{},"没":{"docs":{},"啥":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"但":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"整":{"docs":{},"个":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"放":{"docs":{},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"定":{"docs":{},"文":{"docs":{},"件":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"放":{"docs":{},"置":{"docs":{},"名":{"docs":{},"为":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"中":{"docs":{},"挑":{"docs":{},"一":{"docs":{},"个":{"docs":{},"一":{"docs":{},"定":{"docs":{},"会":{"docs":{},"加":{"docs":{},"载":{"docs":{},"的":{"docs":{},"类":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{},"重":{"docs":{},"复":{"docs":{},"类":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"给":{"docs":{},"个":{"docs":{},"示":{"docs":{},"例":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},"指":{"docs":{},"向":{"docs":{},"本":{"docs":{},"地":{"docs":{},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}},"更":{"docs":{},"事":{"docs":{},"件":{"docs":{},"监":{"docs":{},"听":{"docs":{},"器":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{},"构":{"docs":{},"建":{"docs":{},"命":{"docs":{},"令":{"docs":{},"来":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"面":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},":":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}},"能":{"docs":{},"存":{"docs":{},"在":{"docs":{},"未":{"docs":{},"知":{"docs":{},"特":{"docs":{},"定":{"docs":{},"场":{"docs":{},"景":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"或":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"误":{"docs":{},"修":{"docs":{},"改":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"(":{"docs":{},"但":{"docs":{},"一":{"docs":{},"般":{"docs":{},"人":{"docs":{},"员":{"docs":{},"不":{"docs":{},"会":{"docs":{},"去":{"docs":{},"掉":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"业":{"docs":{},"务":{"docs":{},"方":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}},"配":{"docs":{},"置":{"docs":{},"一":{"docs":{},"定":{"docs":{},"可":{"docs":{},"编":{"docs":{},"程":{"docs":{},",":{"docs":{},"并":{"docs":{},"保":{"docs":{},"持":{"docs":{},"友":{"docs":{},"好":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},"编":{"docs":{},"程":{"docs":{},"配":{"docs":{},"置":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}},"命":{"docs":{},"令":{"docs":{},"配":{"docs":{},"置":{"docs":{},":":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"扩":{"docs":{},"展":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":3.345098039215686}}}},"和":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}},"在":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044},"design.html":{"ref":"design.html","tf":0.005988023952095809},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464},"release.html":{"ref":"release.html","tf":0.014084507042253521},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"很":{"docs":{},"多":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"都":{"docs":{},"使":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"加":{"docs":{},"载":{"docs":{},"到":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"有":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"构":{"docs":{},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"则":{"docs":{},"判":{"docs":{},"定":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"上":{"docs":{},"添":{"docs":{},"加":{"docs":{},"了":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"类":{"docs":{},"似":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"类":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"调":{"docs":{},"用":{"docs":{},"该":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"发":{"docs":{},"现":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"册":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"连":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"遇":{"docs":{},"到":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"缺":{"docs":{},"省":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018}}}},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},"上":{"docs":{},"设":{"docs":{},"置":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"启":{"docs":{},"前":{"docs":{},",":{"docs":{},"先":{"docs":{},"手":{"docs":{},"工":{"docs":{},"将":{"docs":{},"出":{"docs":{},"错":{"docs":{},"现":{"docs":{},"场":{"docs":{},"所":{"docs":{},"有":{"docs":{},"数":{"docs":{},"据":{"docs":{},"备":{"docs":{},"份":{"docs":{},"一":{"docs":{},"下":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"最":{"docs":{},"好":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"搜":{"docs":{},"文":{"docs":{},"件":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"给":{"docs":{},"应":{"docs":{},"用":{"docs":{},"排":{"docs":{},"错":{"docs":{},"时":{"docs":{},",":{"docs":{},"最":{"docs":{},"怕":{"docs":{},"的":{"docs":{},"就":{"docs":{},"是":{"docs":{},"那":{"docs":{},"种":{"docs":{},"只":{"docs":{},"有":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"一":{"docs":{},"句":{"docs":{},"错":{"docs":{},"误":{"docs":{},"描":{"docs":{},"述":{"docs":{},",":{"docs":{},"啥":{"docs":{},"信":{"docs":{},"息":{"docs":{},"都":{"docs":{},"没":{"docs":{},"有":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"上":{"docs":{},"次":{"docs":{},"碰":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"根":{"docs":{},"据":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"定":{"docs":{},"义":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}},"期":{"docs":{},"升":{"docs":{},"级":{"docs":{},"版":{"docs":{},"本":{"docs":{},"用":{"docs":{},"户":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"不":{"docs":{},"安":{"docs":{},"。":{"docs":{},"这":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"假":{"docs":{},"命":{"docs":{},"题":{"docs":{},",":{"docs":{},"说":{"docs":{},"明":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"使":{"docs":{},"用":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"产":{"docs":{},"品":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"产":{"docs":{},"品":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"也":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},"。":{"docs":{},"平":{"docs":{},"台":{"docs":{},"的":{"docs":{},"产":{"docs":{},"品":{"docs":{},"为":{"docs":{},"了":{"docs":{},"适":{"docs":{},"应":{"docs":{},"各":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"想":{"docs":{},",":{"docs":{},"有":{"docs":{},"没":{"docs":{},"有":{"docs":{},"什":{"docs":{},"么":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"大":{"docs":{},"家":{"docs":{},"共":{"docs":{},"同":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"的":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"平":{"docs":{},"时":{"docs":{},"写":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"的":{"docs":{},"一":{"docs":{},"习":{"docs":{},"惯":{"docs":{},",":{"docs":{},"总":{"docs":{},"结":{"docs":{},"了":{"docs":{},"一":{"docs":{},"下":{"docs":{},"在":{"docs":{},"写":{"docs":{},"代":{"docs":{},"码":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"是":{"docs":{},"框":{"docs":{},"架":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"要":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"牢":{"docs":{},"记":{"docs":{},"的":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{},"可":{"docs":{},"能":{"docs":{},"下":{"docs":{},"面":{"docs":{},"要":{"docs":{},"讲":{"docs":{},"的":{"docs":{},"这":{"docs":{},"些":{"docs":{},",":{"docs":{},"大":{"docs":{},"家":{"docs":{},"都":{"docs":{},"会":{"docs":{},"觉":{"docs":{},"得":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"很":{"docs":{},"基":{"docs":{},"础":{"docs":{},",":{"docs":{},"但":{"docs":{},"要":{"docs":{},"做":{"docs":{},"到":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"牢":{"docs":{},"记":{"docs":{},"。":{"docs":{},"在":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"都":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"这":{"docs":{},"些":{"docs":{},"因":{"docs":{},"素":{"docs":{},",":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"很":{"docs":{},"大":{"docs":{},"耐":{"docs":{},"心":{"docs":{},"的":{"docs":{},",":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"或":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.021739130434782608}},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"以":{"docs":{},"上":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}},"去":{"docs":{},"掉":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},":":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}},"把":{"docs":{},"平":{"docs":{},"时":{"docs":{},"支":{"docs":{},"持":{"docs":{},"应":{"docs":{},"用":{"docs":{},"时":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"及":{"docs":{},"解":{"docs":{},"决":{"docs":{},"办":{"docs":{},"法":{"docs":{},"都":{"docs":{},"写":{"docs":{},"到":{"docs":{},"异":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"里":{"docs":{},"。":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},"其":{"docs":{},"它":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"也":{"docs":{},"转":{"docs":{},"成":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},"b":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"备":{"docs":{},"选":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"集":{"docs":{},"群":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"本":{"docs":{},"地":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"文":{"docs":{},"件":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"6":{"0":{"0":{"0":{"0":{"docs":{},"会":{"docs":{},"话":{"docs":{},"超":{"docs":{},"时":{"docs":{},"或":{"docs":{},"过":{"docs":{},"期":{"docs":{},"设":{"docs":{},"置":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"=":{"1":{"0":{"0":{"0":{"docs":{},"请":{"docs":{},"求":{"docs":{},"超":{"docs":{},"时":{"docs":{},"设":{"docs":{},"置":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"上":{"docs":{},"的":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"权":{"docs":{},"限":{"docs":{},"认":{"docs":{},"证":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}},"通":{"docs":{},"过":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"来":{"docs":{},"查":{"docs":{},"看":{"docs":{},"所":{"docs":{},"有":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"标":{"docs":{},"签":{"docs":{},"。":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}},"决":{"docs":{},"定":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"源":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"实":{"docs":{},"现":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}},"之":{"docs":{},"前":{"docs":{},"需":{"docs":{},"要":{"docs":{},"配":{"docs":{},"置":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}},"源":{"docs":{},"代":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}},"要":{"docs":{},"求":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"何":{"docs":{},"决":{"docs":{},"定":{"docs":{},"要":{"docs":{},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"在":{"docs":{},"这":{"docs":{},"个":{"docs":{},"示":{"docs":{},"例":{"docs":{},"中":{"docs":{},",":{"docs":{},"即":{"docs":{},"是":{"docs":{},"在":{"docs":{},"多":{"docs":{},"个":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"效":{"docs":{},"利":{"docs":{},"用":{"docs":{},"这":{"docs":{},"个":{"docs":{},"工":{"docs":{},"具":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"以":{"docs":{},"下":{"docs":{},"命":{"docs":{},"令":{"docs":{},"以":{"docs":{},"构":{"docs":{},"建":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}},"的":{"docs":{},"这":{"docs":{},"个":{"docs":{},"命":{"docs":{},"令":{"docs":{},"签":{"docs":{},"出":{"docs":{},"最":{"docs":{},"新":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"源":{"docs":{},"码":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}}}}}}}}}}}}}}},"扫":{"docs":{},"描":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"知":{"docs":{},"者":{"docs":{},"(":{"docs":{},"即":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"实":{"docs":{},"现":{"docs":{},")":{"docs":{},"需":{"docs":{},"保":{"docs":{},"证":{"docs":{},"通":{"docs":{},"知":{"docs":{},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"单":{"docs":{},"线":{"docs":{},"程":{"docs":{},"推":{"docs":{},"送":{"docs":{},",":{"docs":{},"队":{"docs":{},"列":{"docs":{},"串":{"docs":{},"行":{"docs":{},"化":{"docs":{},",":{"docs":{},"带":{"docs":{},"版":{"docs":{},"本":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}},"服":{"docs":{},"务":{"docs":{},"地":{"docs":{},"址":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"道":{"docs":{},"信":{"docs":{},"息":{"docs":{},"派":{"docs":{},"发":{"docs":{},"器":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"指":{"docs":{},"定":{"docs":{},"线":{"docs":{},"程":{"docs":{},"池":{"docs":{},"模":{"docs":{},"型":{"docs":{},"。":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"环":{"docs":{},"境":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},"都":{"docs":{},"会":{"docs":{},"采":{"docs":{},"用":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"首":{"docs":{},"先":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{"build.html":{"ref":"build.html","tf":0.008695652173913044}}}}},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},"是":{"docs":{},"有":{"docs":{},"多":{"docs":{},"种":{"docs":{},"的":{"docs":{},",":{"docs":{},"大":{"docs":{},"致":{"docs":{},"可":{"docs":{},"以":{"docs":{},"分":{"docs":{},"为":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}},"查":{"docs":{},"找":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"m":{"docs":{},"f":{"docs":{},"规":{"docs":{},"范":{"docs":{},"中":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}},"+":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.017793594306049824}},"%":{"docs":{},"y":{"docs":{},"%":{"docs":{},"m":{"docs":{},"%":{"docs":{},"d":{"docs":{},"%":{"docs":{},"h":{"docs":{},"%":{"docs":{},"m":{"docs":{},"%":{"docs":{},"s":{"docs":{},"`":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"+":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.021739130434782608}},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"各":{"docs":{},"层":{"docs":{},"均":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"用":{"docs":{},"户":{"docs":{},"通":{"docs":{},"过":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}}}}},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"?":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"&":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"&":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"=":{"docs":{},"j":{"docs":{},"s":{"docs":{},"&":{"docs":{},"r":{"docs":{},"u":{"docs":{},"l":{"docs":{},"e":{"docs":{},"=":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"{":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"coding.html":{"ref":"coding.html","tf":0.03787878787878788}},",":{"docs":{},"即":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}},"l":{"docs":{},"l":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"r":{"docs":{},"g":{"1":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"2":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"s":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},",":{"docs":{},"后":{"docs":{},"来":{"docs":{},",":{"docs":{},"有":{"docs":{},"了":{"docs":{},"无":{"docs":{},"接":{"docs":{},"口":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"方":{"docs":{},"法":{"docs":{},"也":{"docs":{},"能":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"并":{"docs":{},"将":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"管":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{},"无":{"docs":{},"接":{"docs":{},"口":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"都":{"docs":{},"得":{"docs":{},"把":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.03260869565217391}},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"里":{"docs":{},"面":{"docs":{},"有":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"v":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"n":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"v":{"docs":{},"r":{"docs":{},"o":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"t":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"f":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"i":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.019572953736654804}},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/filter.html":{"ref":"impls/filter.html","tf":0.06504065040650407},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},".":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},"\"":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"x":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.008896797153024912}},",":{"docs":{},"以":{"docs":{},"免":{"docs":{},"被":{"docs":{},"中":{"docs":{},"途":{"docs":{},"误":{"docs":{},"修":{"docs":{},"改":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{},"不":{"docs":{},"要":{"docs":{},"以":{"docs":{},"为":{"docs":{},"这":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"是":{"docs":{},"私":{"docs":{},"有":{"docs":{},"的":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"类":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"都":{"docs":{},"是":{"docs":{},"我":{"docs":{},"自":{"docs":{},"己":{"docs":{},"写":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"对":{"docs":{},"这":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"重":{"docs":{},"新":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"。":{"docs":{},"要":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"因":{"docs":{},"素":{"docs":{},"是":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"能":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"人":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"他":{"docs":{},"不":{"docs":{},"知":{"docs":{},"道":{"docs":{},"你":{"docs":{},"的":{"docs":{},"这":{"docs":{},"个":{"docs":{},"弱":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"o":{"docs":{},"o":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{},"剔":{"docs":{},"除":{"docs":{},"添":{"docs":{},"加":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}},"docs":{}},"r":{"docs":{},"k":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"e":{"docs":{},"d":{"docs":{},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}}}},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"y":{"docs":{},"、":{"docs":{},"i":{"docs":{},"o":{"docs":{},"c":{"docs":{},"、":{"docs":{},"o":{"docs":{},"s":{"docs":{},"g":{"docs":{},"i":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}}}}}}}}}}}},"o":{"docs":{},"k":{"docs":{},"u":{"docs":{},"p":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}},"g":{"4":{"docs":{},"j":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}},"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.020618556701030927}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.022222222222222223},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"d":{"docs":{},"u":{"docs":{},"p":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},">":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}},"e":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}},";":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"z":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"y":{"docs":{},"连":{"docs":{},"接":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.012578616352201259}},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232}},";":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}},";":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"(":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}},")":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.014245014245014245}},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.03125},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.008896797153024912}},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.019230769230769232},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"[":{"docs":{},"]":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"将":{"docs":{},"实":{"docs":{},"例":{"docs":{},"方":{"docs":{},"法":{"docs":{},"存":{"docs":{},"储":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"只":{"docs":{},"通":{"docs":{},"知":{"docs":{},"其":{"docs":{},"中":{"docs":{},"一":{"docs":{},"种":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"但":{"docs":{},"该":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"全":{"docs":{},"量":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"是":{"docs":{},"增":{"docs":{},"量":{"docs":{},"的":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"=":{"docs":{},"~":{"docs":{},"/":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"当":{"docs":{},"网":{"docs":{},"络":{"docs":{},"断":{"docs":{},"开":{"docs":{},"或":{"docs":{},"连":{"docs":{},"上":{"docs":{},"应":{"docs":{},"该":{"docs":{},"发":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"事":{"docs":{},"件":{"docs":{},",":{"docs":{},"当":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"发":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"事":{"docs":{},"件":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"外":{"docs":{},"围":{"docs":{},"应":{"docs":{},"用":{"docs":{},"就":{"docs":{},"有":{"docs":{},"可":{"docs":{},"能":{"docs":{},"观":{"docs":{},"察":{"docs":{},"到":{"docs":{},"框":{"docs":{},"架":{"docs":{},"内":{"docs":{},"部":{"docs":{},"的":{"docs":{},"变":{"docs":{},"化":{"docs":{},",":{"docs":{},"做":{"docs":{},"相":{"docs":{},"应":{"docs":{},"适":{"docs":{},"应":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"/":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"m":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"s":{"docs":{},"g":{"docs":{},"i":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.09782608695652174}},",":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"却":{"docs":{},"为":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"这":{"docs":{},"样":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"i":{"docs":{},"o":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}},"c":{"docs":{},"p":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"w":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},",":{"docs":{},"确":{"docs":{},"保":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857}},"e":{"docs":{},"f":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"e":{"docs":{},"r":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"由":{"docs":{},"协":{"docs":{},"议":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"通":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"此":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"中":{"docs":{},"发":{"docs":{},"送":{"docs":{},"远":{"docs":{},"程":{"docs":{},"请":{"docs":{},"求":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}},"(":{"docs":{},"如":{"docs":{},":":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},")":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.011976047904191617}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"i":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}},"e":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.014970059880239521},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},"{":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407}}}}}}}}}}}}}}},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.021739130434782608}}}}}}}}}},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"e":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"再":{"docs":{},"来":{"docs":{},"一":{"docs":{},"个":{"docs":{},"会":{"docs":{},"话":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"那":{"docs":{},"就":{"docs":{},"再":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/filter.html":{"ref":"impls/filter.html","tf":0.024390243902439025},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983}},";":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},"s":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.010050251256281407},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.03804347826086957}}}}}},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}},"协":{"docs":{},"议":{"docs":{},"则":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"包":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"类":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},",":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}},"s":{"docs":{},",":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"将":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}},"p":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.03293413173652695},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.015209125475285171},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"coding.html":{"ref":"coding.html","tf":0.015151515151515152},"principals/extension.html":{"ref":"principals/extension.html","tf":0.012448132780082987}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"?":{"docs":{},"而":{"docs":{},"哪":{"docs":{},"些":{"docs":{},"又":{"docs":{},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"踢":{"docs":{},"掉":{"docs":{},"的":{"docs":{},"?":{"docs":{},"基":{"docs":{},"于":{"docs":{},"这":{"docs":{},"样":{"docs":{},"考":{"docs":{},"虑":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"b":{"docs":{},"i":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}},"y":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"真":{"docs":{},"正":{"docs":{},"失":{"docs":{},"败":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"(":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}},"t":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},".":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.026615969581749048},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.020833333333333332},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.02197802197802198},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04522613065326633},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"principals/extension.html":{"ref":"principals/extension.html","tf":0.02074688796680498},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.02512562814070352},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"e":{"docs":{},";":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"i":{"docs":{},"f":{"docs":{},"t":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"i":{"docs":{},"s":{"docs":{},".":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"/":{"docs":{},"j":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"o":{"docs":{},"l":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"d":{"docs":{},"o":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.06451612903225806}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.008982035928143712},"SPI.html":{"ref":"SPI.html","tf":0.006578947368421052},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"y":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}},"i":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.046875},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":3.3686274509803917},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}},"s":{"docs":{},"t":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.043478260869565216}},"n":{"docs":{},"g":{"docs":{},",":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"c":{"docs":{},"p":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"k":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.16129032258064516}},",":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}},"即":{"docs":{},"可":{"docs":{},"确":{"docs":{},"保":{"docs":{},"与":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"其":{"docs":{},"它":{"docs":{},"部":{"docs":{},"分":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"运":{"docs":{},"行":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"效":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"健":{"docs":{},"状":{"docs":{},"性":{"docs":{},",":{"docs":{},"也":{"docs":{},"方":{"docs":{},"便":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"接":{"docs":{},"入":{"docs":{},",":{"docs":{},"加":{"docs":{},"速":{"docs":{},"开":{"docs":{},"源":{"docs":{},"社":{"docs":{},"区":{"docs":{},"的":{"docs":{},"成":{"docs":{},"熟":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},",":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.06521739130434782}}}}}},"m":{"docs":{},"e":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"为":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"到":{"docs":{},"了":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"给":{"docs":{},"用":{"docs":{},"户":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},"类":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.020958083832335328}}}}}}},"由":{"docs":{},"外":{"docs":{},"层":{"docs":{},"将":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"部":{"docs":{},"署":{"docs":{},"运":{"docs":{},"行":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"在":{"docs":{},"层":{"docs":{},"中":{"docs":{},"画":{"docs":{},"出":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}},"统":{"docs":{},"一":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"了":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"解":{"docs":{},"释":{"docs":{},"上":{"docs":{},"面":{"docs":{},"这":{"docs":{},"张":{"docs":{},"图":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"结":{"docs":{},"合":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"和":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"示":{"docs":{},"例":{"docs":{},"来":{"docs":{},"进":{"docs":{},"行":{"docs":{},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"传":{"docs":{},"输":{"docs":{},"时":{"docs":{},"能":{"docs":{},"够":{"docs":{},"对":{"docs":{},"回":{"docs":{},"调":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"例":{"docs":{},"进":{"docs":{},"行":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"与":{"docs":{},"自":{"docs":{},"动":{"docs":{},"引":{"docs":{},"用":{"docs":{},"目":{"docs":{},"前":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"试":{"docs":{},"点":{"docs":{},"项":{"docs":{},"目":{"docs":{},"之":{"docs":{},"一":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},"和":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},",":{"docs":{},"而":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"扩":{"docs":{},"展":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"给":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"入":{"docs":{},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}},"参":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}},"伪":{"docs":{},"装":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"代":{"docs":{},"码":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"信":{"docs":{},"息":{"docs":{},"交":{"docs":{},"换":{"docs":{},"层":{"docs":{},",":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},":":{"docs":{},"封":{"docs":{},"装":{"docs":{},"请":{"docs":{},"求":{"docs":{},"响":{"docs":{},"应":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"同":{"docs":{},"步":{"docs":{},"转":{"docs":{},"异":{"docs":{},"步":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":5.0085470085470085}}}},"语":{"docs":{},"义":{"docs":{},"。":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}},"获":{"docs":{},"取":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"公":{"docs":{},"共":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"包":{"docs":{},"括":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"契":{"docs":{},"约":{"docs":{"contract.html":{"ref":"contract.html","tf":5.0476190476190474}},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"所":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"。":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}},"关":{"docs":{},"系":{"docs":{},"说":{"docs":{},"明":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"于":{"docs":{},"每":{"docs":{},"种":{"docs":{},"协":{"docs":{},"议":{"docs":{},"如":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"联":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}},"内":{"docs":{},"部":{"docs":{},"交":{"docs":{},"互":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"再":{"docs":{},"划":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"划":{"docs":{},"分":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"拓":{"docs":{},"普":{"docs":{},"节":{"docs":{},"点":{"docs":{},",":{"docs":{},"保":{"docs":{},"持":{"docs":{},"统":{"docs":{},"一":{"docs":{},"概":{"docs":{},"念":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"注":{"docs":{},"入":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"如":{"docs":{},"果":{"docs":{},"为":{"docs":{},"其":{"docs":{},"它":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"会":{"docs":{},"检":{"docs":{},"查":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"属":{"docs":{},"性":{"docs":{},"(":{"docs":{},"通":{"docs":{},"过":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"方":{"docs":{},"法":{"docs":{},"判":{"docs":{},"断":{"docs":{},")":{"docs":{},",":{"docs":{},"如":{"docs":{},"该":{"docs":{},"属":{"docs":{},"性":{"docs":{},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"则":{"docs":{},"会":{"docs":{},"注":{"docs":{},"入":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"注":{"docs":{},"入":{"docs":{},"时":{"docs":{},"不":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"(":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"确":{"docs":{},"定":{"docs":{},")":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"注":{"docs":{},"入":{"docs":{},"的":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"(":{"docs":{},"一":{"docs":{},"个":{"docs":{},"代":{"docs":{},"理":{"docs":{},")":{"docs":{},"。":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"选":{"docs":{},"取":{"docs":{},"一":{"docs":{},"个":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"并":{"docs":{},"代":{"docs":{},"理":{"docs":{},"到":{"docs":{},"其":{"docs":{},"上":{"docs":{},"完":{"docs":{},"成":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"协":{"docs":{},"议":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"你":{"docs":{},"选":{"docs":{},"择":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},",":{"docs":{},"整":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"头":{"docs":{},"约":{"docs":{},"定":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"识":{"docs":{},"别":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}}}}}},"直":{"docs":{},"接":{"docs":{},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":5.003802281368821},"contribution.html":{"ref":"contribution.html","tf":0.030303030303030304}},"点":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},",":{"docs":{},"封":{"docs":{},"装":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}},"不":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"是":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}},"关":{"docs":{},"心":{"docs":{},"业":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"透":{"docs":{},"明":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"以":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"在":{"docs":{},"接":{"docs":{},"收":{"docs":{},"请":{"docs":{},"求":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"记":{"docs":{},"录":{"docs":{},"请":{"docs":{},"求":{"docs":{},"来":{"docs":{},"源":{"docs":{},"方":{"docs":{},"地":{"docs":{},"址":{"docs":{},"信":{"docs":{},"息":{"docs":{},":":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"可":{"docs":{},",":{"docs":{},"加":{"docs":{},"上":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"完":{"docs":{},"成":{"docs":{},"桥":{"docs":{},"接":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"公":{"docs":{},"共":{"docs":{},"基":{"docs":{},"类":{"docs":{},"实":{"docs":{},"现":{"docs":{},"此":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}}},"存":{"docs":{},"在":{"docs":{},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"环":{"docs":{},"境":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"要":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"加":{"docs":{},"载":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"要":{"docs":{},"统":{"docs":{},"一":{"docs":{},",":{"docs":{},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},"+":{"docs":{},"插":{"docs":{},"件":{"docs":{},"式":{"docs":{},",":{"docs":{},"是":{"docs":{},"比":{"docs":{},"较":{"docs":{},"能":{"docs":{},"达":{"docs":{},"到":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"负":{"docs":{},"责":{"docs":{},"组":{"docs":{},"装":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"载":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}},"对":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"激":{"docs":{},"活":{"docs":{},",":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"可":{"docs":{},"选":{"docs":{},"\"":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},"或":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"口":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"会":{"docs":{},"作":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}},"各":{"docs":{},"层":{"docs":{},"说":{"docs":{},"明":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"启":{"docs":{},"动":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"服":{"docs":{},"务":{"docs":{},"通":{"docs":{},"常":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}},"和":{"docs":{"design.html":{"ref":"design.html","tf":0.014970059880239521},"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"coding.html":{"ref":"coding.html","tf":0.007575757575757576},"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.016304347826086956},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"release.html":{"ref":"release.html","tf":0.014084507042253521},"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"消":{"docs":{},"费":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"部":{"docs":{},"门":{"docs":{},"以":{"docs":{},"及":{"docs":{},"产":{"docs":{},"品":{"docs":{},"线":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"将":{"docs":{},"很":{"docs":{},"多":{"docs":{},"不":{"docs":{},"相":{"docs":{},"干":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"凑":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"客":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"性":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"产":{"docs":{},"品":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"都":{"docs":{},"在":{"docs":{},"不":{"docs":{},"停":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"我":{"docs":{},"们":{"docs":{},"经":{"docs":{},"常":{"docs":{},"会":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"些":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"将":{"docs":{},"新":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"用":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"我":{"docs":{},"想":{"docs":{},"讨":{"docs":{},"论":{"docs":{},"是":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"保":{"docs":{},"留":{"docs":{},"原":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"性":{"docs":{},",":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"独":{"docs":{},"立":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"我":{"docs":{},"最":{"docs":{},"近":{"docs":{},"一":{"docs":{},"直":{"docs":{},"做":{"docs":{},"分":{"docs":{},"布":{"docs":{},"式":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},",":{"docs":{},"就":{"docs":{},"拿":{"docs":{},"我":{"docs":{},"们":{"docs":{},"项":{"docs":{},"目":{"docs":{},"中":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"开":{"docs":{},"涮":{"docs":{},"吧":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"图":{"docs":{},"中":{"docs":{},"从":{"docs":{},"下":{"docs":{},"至":{"docs":{},"上":{"docs":{},"分":{"docs":{},"为":{"docs":{},"十":{"docs":{},"层":{"docs":{},",":{"docs":{},"各":{"docs":{},"层":{"docs":{},"均":{"docs":{},"为":{"docs":{},"单":{"docs":{},"向":{"docs":{},"依":{"docs":{},"赖":{"docs":{},",":{"docs":{},"右":{"docs":{},"边":{"docs":{},"的":{"docs":{},"黑":{"docs":{},"色":{"docs":{},"箭":{"docs":{},"头":{"docs":{},"代":{"docs":{},"表":{"docs":{},"层":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"每":{"docs":{},"一":{"docs":{},"层":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"剥":{"docs":{},"离":{"docs":{},"上":{"docs":{},"层":{"docs":{},"被":{"docs":{},"复":{"docs":{},"用":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"小":{"docs":{},"方":{"docs":{},"块":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"左":{"docs":{},"边":{"docs":{},"淡":{"docs":{},"蓝":{"docs":{},"背":{"docs":{},"景":{"docs":{},"的":{"docs":{},"为":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"右":{"docs":{},"边":{"docs":{},"淡":{"docs":{},"绿":{"docs":{},"色":{"docs":{},"背":{"docs":{},"景":{"docs":{},"的":{"docs":{},"为":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"位":{"docs":{},"于":{"docs":{},"中":{"docs":{},"轴":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"为":{"docs":{},"双":{"docs":{},"方":{"docs":{},"都":{"docs":{},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"绿":{"docs":{},"色":{"docs":{},"小":{"docs":{},"块":{"docs":{},"的":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"小":{"docs":{},"块":{"docs":{},"为":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},",":{"docs":{},"图":{"docs":{},"中":{"docs":{},"只":{"docs":{},"显":{"docs":{},"示":{"docs":{},"用":{"docs":{},"于":{"docs":{},"关":{"docs":{},"联":{"docs":{},"各":{"docs":{},"层":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"背":{"docs":{},"景":{"docs":{},"方":{"docs":{},"块":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"蓝":{"docs":{},"色":{"docs":{},"虚":{"docs":{},"线":{"docs":{},"为":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"红":{"docs":{},"色":{"docs":{},"虚":{"docs":{},"线":{"docs":{},"为":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"异":{"docs":{},"步":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"红":{"docs":{},"色":{"docs":{},"实":{"docs":{},"线":{"docs":{},"为":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"同":{"docs":{},"步":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"即":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},"组":{"docs":{},"装":{"docs":{},"链":{"docs":{},",":{"docs":{},"红":{"docs":{},"色":{"docs":{},"实":{"docs":{},"线":{"docs":{},"为":{"docs":{},"方":{"docs":{},"法":{"docs":{},"调":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"即":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"调":{"docs":{},"时":{"docs":{},"链":{"docs":{},",":{"docs":{},"紫":{"docs":{},"色":{"docs":{},"三":{"docs":{},"角":{"docs":{},"箭":{"docs":{},"头":{"docs":{},"为":{"docs":{},"继":{"docs":{},"承":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"把":{"docs":{},"子":{"docs":{},"类":{"docs":{},"看":{"docs":{},"作":{"docs":{},"父":{"docs":{},"类":{"docs":{},"的":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"节":{"docs":{},"点":{"docs":{},",":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"文":{"docs":{},"字":{"docs":{},"为":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}}},"基":{"docs":{},"本":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"于":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},"之":{"docs":{},"上":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}},"复":{"docs":{},"用":{"docs":{},"度":{"docs":{},"分":{"docs":{},"包":{"docs":{},",":{"docs":{},"总":{"docs":{},"是":{"docs":{},"一":{"docs":{},"起":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"放":{"docs":{},"在":{"docs":{},"同":{"docs":{},"一":{"docs":{},"包":{"docs":{},"下":{"docs":{},",":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"和":{"docs":{},"基":{"docs":{},"类":{"docs":{},"分":{"docs":{},"成":{"docs":{},"独":{"docs":{},"立":{"docs":{},"模":{"docs":{},"块":{"docs":{},",":{"docs":{},"大":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"也":{"docs":{},"使":{"docs":{},"用":{"docs":{},"独":{"docs":{},"立":{"docs":{},"模":{"docs":{},"块":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"也":{"docs":{},"是":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"础":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"在":{"docs":{},"此":{"docs":{},"之":{"docs":{},"上":{"docs":{},"实":{"docs":{},"现":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"在":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"里":{"docs":{},"动":{"docs":{},"态":{"docs":{},"生":{"docs":{},"成":{"docs":{},"。":{"docs":{},"指":{"docs":{},"定":{"docs":{},"提":{"docs":{},"取":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"先":{"docs":{},"查":{"docs":{},"找":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"来":{"docs":{},"调":{"docs":{},"用":{"docs":{},"对":{"docs":{},"应":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"类":{"docs":{},"内":{"docs":{},"容":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"的":{"docs":{},"实":{"docs":{},"例":{"docs":{},"报":{"docs":{},"上":{"docs":{},"来":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"只":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"这":{"docs":{},"些":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"这":{"docs":{},"些":{"docs":{},"对":{"docs":{},"象":{"docs":{},"是":{"docs":{},"怎":{"docs":{},"么":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},",":{"docs":{},"怎":{"docs":{},"么":{"docs":{},"销":{"docs":{},"毁":{"docs":{},"的":{"docs":{},",":{"docs":{},"都":{"docs":{},"和":{"docs":{},"框":{"docs":{},"架":{"docs":{},"无":{"docs":{},"关":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"最":{"docs":{},"多":{"docs":{},"提":{"docs":{},"供":{"docs":{},"工":{"docs":{},"具":{"docs":{},"类":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"控":{"docs":{},"制":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},",":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"类":{"docs":{},"名":{"docs":{},"或":{"docs":{},"类":{"docs":{},"元":{"docs":{},"信":{"docs":{},"息":{"docs":{},"报":{"docs":{},"上":{"docs":{},"来":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"在":{"docs":{},"内":{"docs":{},"部":{"docs":{},"通":{"docs":{},"过":{"docs":{},"反":{"docs":{},"射":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":5.002597402597402}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{},"传":{"docs":{},"递":{"docs":{},"采":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"对":{"docs":{},"于":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{},"由":{"docs":{},"于":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"共":{"docs":{},"享":{"docs":{},"连":{"docs":{},"接":{"docs":{},",":{"docs":{},"那":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"通":{"docs":{},"用":{"docs":{},"行":{"docs":{},"为":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"基":{"docs":{},"类":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"之":{"docs":{},"前":{"docs":{},"的":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"每":{"docs":{},"个":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"是":{"docs":{},"调":{"docs":{},"用":{"docs":{},"链":{"docs":{},"上":{"docs":{},"的":{"docs":{},"一":{"docs":{},"环":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}},"会":{"docs":{},"将":{"docs":{},"收":{"docs":{},"到":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"转":{"docs":{},"给":{"docs":{},"目":{"docs":{},"标":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"就":{"docs":{},"能":{"docs":{},"将":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"增":{"docs":{},"量":{"docs":{},"到":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"上":{"docs":{},",":{"docs":{},"并":{"docs":{},"保":{"docs":{},"持":{"docs":{},"原":{"docs":{},"来":{"docs":{},"结":{"docs":{},"构":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"性":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}},"际":{"docs":{},"上":{"docs":{},"不":{"docs":{},"算":{"docs":{},"一":{"docs":{},"层":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"节":{"docs":{},"点":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"全":{"docs":{},"局":{"docs":{},"概":{"docs":{},"览":{"docs":{},",":{"docs":{},"用":{"docs":{},"层":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"画":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"取":{"docs":{},"约":{"docs":{},"定":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"是":{"docs":{},"固":{"docs":{},"定":{"docs":{},",":{"docs":{},"指":{"docs":{},"定":{"docs":{},"提":{"docs":{},"取":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"细":{"docs":{},"节":{"docs":{},"和":{"docs":{},"上":{"docs":{},"一":{"docs":{},"章":{"docs":{},"节":{"docs":{},"所":{"docs":{},"描":{"docs":{},"述":{"docs":{},"的":{"docs":{},"类":{"docs":{},"似":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"方":{"docs":{},"法":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"才":{"docs":{},"决":{"docs":{},"定":{"docs":{},"调":{"docs":{},"用":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}},"从":{"docs":{},"而":{"docs":{},"真":{"docs":{},"正":{"docs":{},"调":{"docs":{},"用":{"docs":{},"了":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}},"到":{"docs":{},"这":{"docs":{},"一":{"docs":{},"步":{"docs":{},"就":{"docs":{},"完":{"docs":{},"成":{"docs":{},"具":{"docs":{},"体":{"docs":{},"服":{"docs":{},"务":{"docs":{},"到":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},"并":{"docs":{},"新":{"docs":{},"生":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"调":{"docs":{},"用":{"docs":{},"它":{"docs":{},"所":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"(":{"docs":{},"如":{"docs":{},"上":{"docs":{},"图":{"docs":{},"中":{"docs":{},"的":{"docs":{},"红":{"docs":{},"色":{"docs":{},"部":{"docs":{},"分":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"的":{"docs":{},"关":{"docs":{},"键":{"docs":{},"。":{"docs":{},"接":{"docs":{},"下":{"docs":{},"来":{"docs":{},"把":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"当":{"docs":{},"网":{"docs":{},"络":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"层":{"docs":{},"收":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"请":{"docs":{},"求":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"找":{"docs":{},"到":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}},"容":{"docs":{},"器":{"docs":{},"去":{"docs":{},"加":{"docs":{},"载":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"的":{"docs":{},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"没":{"docs":{},"必":{"docs":{},"要":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":5.014705882352941}}}},"。":{"docs":{},"自":{"docs":{},"已":{"docs":{},"造":{"docs":{},"一":{"docs":{},"个":{"docs":{},"小":{"docs":{},"的":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},",":{"docs":{},"也":{"docs":{},"觉":{"docs":{},"得":{"docs":{},"有":{"docs":{},"点":{"docs":{},"过":{"docs":{},"度":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"打":{"docs":{},"算":{"docs":{},"采":{"docs":{},"用":{"docs":{},"最":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}},"错":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},",":{"docs":{},"路":{"docs":{},"由":{"docs":{},"等":{"docs":{},",":{"docs":{},"集":{"docs":{},"群":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"列":{"docs":{},"表":{"docs":{},"可":{"docs":{},"以":{"docs":{},"是":{"docs":{},"静":{"docs":{},"态":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"是":{"docs":{},"由":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"下":{"docs":{},"发":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"其":{"docs":{},"它":{"docs":{},"层":{"docs":{},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"造":{"docs":{},"成":{"docs":{},"影":{"docs":{},"响":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"时":{"docs":{},",":{"docs":{},"是":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"唯":{"docs":{},"一":{"docs":{},"异":{"docs":{},"常":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"内":{"docs":{},"部":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"给":{"docs":{},"用":{"docs":{},"户":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"转":{"docs":{},"为":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"于":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"集":{"docs":{},"合":{"docs":{},"类":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}},"容":{"docs":{},"错":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"对":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},"和":{"docs":{},"可":{"docs":{},"见":{"docs":{},"性":{"docs":{},"的":{"docs":{},"深":{"docs":{},"入":{"docs":{},"理":{"docs":{},"解":{"docs":{},"是":{"docs":{},"最":{"docs":{},"基":{"docs":{},"本":{"docs":{},"的":{"docs":{},"要":{"docs":{},"求":{"docs":{},"。":{"docs":{},"需":{"docs":{},"要":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"在":{"docs":{},"写":{"docs":{},"每":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"都":{"docs":{},"应":{"docs":{},"在":{"docs":{},"潜":{"docs":{},"意":{"docs":{},"识":{"docs":{},"中":{"docs":{},"确":{"docs":{},"保":{"docs":{},"其":{"docs":{},"正":{"docs":{},"确":{"docs":{},"性":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"种":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"在":{"docs":{},"小":{"docs":{},"并":{"docs":{},"发":{"docs":{},"下":{"docs":{},"做":{"docs":{},"功":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"显":{"docs":{},"得":{"docs":{},"很":{"docs":{},"正":{"docs":{},"常":{"docs":{},"。":{"docs":{},"但":{"docs":{},"在":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"下":{"docs":{},"就":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"莫":{"docs":{},"明":{"docs":{},"其":{"docs":{},"妙":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"场":{"docs":{},"景":{"docs":{},"很":{"docs":{},"难":{"docs":{},"重":{"docs":{},"现":{"docs":{},",":{"docs":{},"极":{"docs":{},"难":{"docs":{},"排":{"docs":{},"查":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"环":{"docs":{},"境":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"应":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"不":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"执":{"docs":{},"行":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"值":{"docs":{},"(":{"docs":{},"实":{"docs":{},"例":{"docs":{},"方":{"docs":{},"法":{"docs":{},")":{"docs":{},"加":{"docs":{},"入":{"docs":{},"到":{"docs":{},"异":{"docs":{},"步":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"回":{"docs":{},"调":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}},"象":{"docs":{},"(":{"docs":{},"包":{"docs":{},"含":{"docs":{},"了":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"转":{"docs":{},"换":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}},"封":{"docs":{},"装":{"docs":{},"了":{"docs":{},"本":{"docs":{},"来":{"docs":{},"要":{"docs":{},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"直":{"docs":{},"接":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"都":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}},"等":{"docs":{},"网":{"docs":{},"络":{"docs":{},"节":{"docs":{},"点":{"docs":{},"组":{"docs":{},"网":{"docs":{},"器":{"docs":{},"。":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}},"多":{"docs":{},"种":{"docs":{},"相":{"docs":{},"似":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},",":{"docs":{},"用":{"docs":{},"基":{"docs":{},"类":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}},"产":{"docs":{},"品":{"docs":{},"都":{"docs":{},"很":{"docs":{},"重":{"docs":{},"要":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"添":{"docs":{},"加":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}},"多":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"对":{"docs":{},"象":{"docs":{},"转":{"docs":{},"成":{"docs":{},"字":{"docs":{},"节":{"docs":{},"流":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"网":{"docs":{},"络":{"docs":{},"传":{"docs":{},"输":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"将":{"docs":{},"字":{"docs":{},"节":{"docs":{},"流":{"docs":{},"转":{"docs":{},"为":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"在":{"docs":{},"收":{"docs":{},"到":{"docs":{},"字":{"docs":{},"节":{"docs":{},"流":{"docs":{},"数":{"docs":{},"据":{"docs":{},"后":{"docs":{},"还":{"docs":{},"原":{"docs":{},"成":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"完":{"docs":{},"成":{"docs":{},"非":{"docs":{},"透":{"docs":{},"明":{"docs":{},"的":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}},"是":{"docs":{},"上":{"docs":{},"图":{"docs":{},"中":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"端":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"变":{"docs":{},"契":{"docs":{},"约":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}},"出":{"docs":{},"现":{"docs":{},"过":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"中":{"docs":{},"间":{"docs":{},"层":{"docs":{},"用":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"做":{"docs":{},"为":{"docs":{},"缓":{"docs":{},"存":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"留":{"docs":{},"一":{"docs":{},"些":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"让":{"docs":{},"参":{"docs":{},"与":{"docs":{},"者":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"黑":{"docs":{},"盒":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"白":{"docs":{},"盒":{"docs":{},"的":{"docs":{},"修":{"docs":{},"改":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"分":{"docs":{},"支":{"docs":{},",":{"docs":{},"质":{"docs":{},"量":{"docs":{},",":{"docs":{},"合":{"docs":{},"并":{"docs":{},",":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"都":{"docs":{},"会":{"docs":{},"很":{"docs":{},"难":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"要":{"docs":{},"满":{"docs":{},"足":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"地":{"docs":{},"址":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"层":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"只":{"docs":{},"负":{"docs":{},"责":{"docs":{},"单":{"docs":{},"向":{"docs":{},"消":{"docs":{},"息":{"docs":{},"传":{"docs":{},"输":{"docs":{},",":{"docs":{},"是":{"docs":{},"对":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}},"和":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}},"封":{"docs":{},"装":{"docs":{},"了":{"docs":{},"所":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"透":{"docs":{},"明":{"docs":{},"化":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"而":{"docs":{},"在":{"docs":{},"其":{"docs":{},"它":{"docs":{},"层":{"docs":{},"都":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"是":{"docs":{},"在":{"docs":{},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},"之":{"docs":{},"上":{"docs":{},"封":{"docs":{},"装":{"docs":{},"了":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"都":{"docs":{},"放":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}}}}}},"展":{"docs":{},"开":{"docs":{},"总":{"docs":{},"设":{"docs":{},"计":{"docs":{},"图":{"docs":{},"右":{"docs":{},"边":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"链":{"docs":{},",":{"docs":{},"时":{"docs":{},"序":{"docs":{},"图":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}},"左":{"docs":{},"边":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"蓝":{"docs":{},"色":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"链":{"docs":{},",":{"docs":{},"时":{"docs":{},"序":{"docs":{},"图":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"红":{"docs":{},"色":{"docs":{},"调":{"docs":{},"用":{"docs":{},"链":{"docs":{},",":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"时":{"docs":{},"序":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"监":{"docs":{},"听":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":5.013888888888889}}}}}},"和":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}},"了":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"所":{"docs":{},"有":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"均":{"docs":{},"支":{"docs":{},"持":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"参":{"docs":{},"数":{"docs":{},"都":{"docs":{},"包":{"docs":{},"含":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"放":{"docs":{},"在":{"docs":{},"模":{"docs":{},"块":{"docs":{},"的":{"docs":{},"根":{"docs":{},"包":{"docs":{},"下":{"docs":{},",":{"docs":{},"基":{"docs":{},"类":{"docs":{},"放":{"docs":{},"在":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"在":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}},"以":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"核":{"docs":{},"心":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"写":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}},"拦":{"docs":{},"截":{"docs":{},"点":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"扩":{"docs":{},"展":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"携":{"docs":{},"带":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"数":{"docs":{},"据":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"层":{"docs":{},":":{"docs":{},"可":{"docs":{},"复":{"docs":{},"用":{"docs":{},"的":{"docs":{},"一":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}},"库":{"docs":{},"上":{"docs":{},"的":{"docs":{},"活":{"docs":{},"锁":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"组":{"docs":{},",":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"然":{"docs":{},"而":{"docs":{},",":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"都":{"docs":{},"用":{"docs":{},"不":{"docs":{},"上":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"后":{"docs":{},"传":{"docs":{},"给":{"docs":{},"业":{"docs":{},"务":{"docs":{},"方":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"量":{"docs":{},"相":{"docs":{},"对":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"会":{"docs":{},"对":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"造":{"docs":{},"成":{"docs":{},"冲":{"docs":{},"击":{"docs":{},"。":{"docs":{},"避":{"docs":{},"免":{"docs":{},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"以":{"docs":{},"是":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}},"整":{"docs":{},"体":{"docs":{},"上":{"docs":{},"按":{"docs":{},"照":{"docs":{},"分":{"docs":{},"层":{"docs":{},"结":{"docs":{},"构":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"包":{"docs":{},",":{"docs":{},"与":{"docs":{},"分":{"docs":{},"层":{"docs":{},"的":{"docs":{},"不":{"docs":{},"同":{"docs":{},"点":{"docs":{},"在":{"docs":{},"于":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"计":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"都":{"docs":{},"隐":{"docs":{},"含":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"理":{"docs":{},"后":{"docs":{},",":{"docs":{},"设":{"docs":{},"计":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"是":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"持":{"docs":{},"有":{"docs":{},"调":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"方":{"docs":{},"法":{"docs":{},"名":{"docs":{},",":{"docs":{},"参":{"docs":{},"数":{"docs":{},"等":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"外":{"docs":{},"围":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"抽":{"docs":{},"象":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"想":{"docs":{},"让":{"docs":{},"看":{"docs":{},"图":{"docs":{},"者":{"docs":{},"更":{"docs":{},"直":{"docs":{},"观":{"docs":{},"的":{"docs":{},"了":{"docs":{},"解":{"docs":{},"哪":{"docs":{},"些":{"docs":{},"类":{"docs":{},"分":{"docs":{},"属":{"docs":{},"于":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"与":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"核":{"docs":{},"心":{"docs":{},"层":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"只":{"docs":{},"要":{"docs":{},"有":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"包":{"docs":{},"装":{"docs":{},"的":{"docs":{},"最":{"docs":{},"终":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"给":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"用":{"docs":{},"的":{"docs":{},"。":{"docs":{},"在":{"docs":{},"设":{"docs":{},"计":{"docs":{},"时":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"把":{"docs":{},"它":{"docs":{},"们":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"开":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"混":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},"。":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"说":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"看":{"docs":{},"不":{"docs":{},"到":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"写":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"隔":{"docs":{},"离":{"docs":{},"的":{"docs":{},"。":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"流":{"docs":{},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}},"否":{"docs":{},"使":{"docs":{},"用":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"允":{"docs":{},"许":{"docs":{},"重":{"docs":{},"试":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"次":{"docs":{},"数":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}},"根":{"docs":{},"据":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"法":{"docs":{},"参":{"docs":{},"数":{"docs":{},"(":{"docs":{},"上":{"docs":{},"面":{"docs":{},"有":{"docs":{},"调":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},")":{"docs":{},"来":{"docs":{},"选":{"docs":{},"取":{"docs":{},"一":{"docs":{},"个":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"和":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"主":{"docs":{},"功":{"docs":{},"能":{"docs":{},"入":{"docs":{},"口":{"docs":{},",":{"docs":{},"它":{"docs":{},"负":{"docs":{},"责":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"时":{"docs":{},"序":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"取":{"docs":{},"消":{"docs":{},"暴":{"docs":{},"露":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}},"监":{"docs":{},"听":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":5.013888888888889}}}}}},"了":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"更":{"docs":{},"多":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"框":{"docs":{},"架":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"代":{"docs":{},"理":{"docs":{},"层":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"透":{"docs":{},"明":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"生":{"docs":{},"成":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"代":{"docs":{},"码":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"暴":{"docs":{},"露":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"详":{"docs":{},"细":{"docs":{},"过":{"docs":{},"程":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"选":{"docs":{},"择":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"方":{"docs":{},"和":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"调":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},"拦":{"docs":{},"截":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"程":{"docs":{},"实":{"docs":{},"现":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"当":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"收":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"请":{"docs":{},"求":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"线":{"docs":{},"程":{"docs":{},"池":{"docs":{},"中":{"docs":{},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"代":{"docs":{},"码":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"消":{"docs":{},"费":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"详":{"docs":{},"细":{"docs":{},"过":{"docs":{},"程":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}},"息":{"docs":{},"者":{"docs":{},"从":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"拿":{"docs":{},"到":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"后":{"docs":{},",":{"docs":{},"会":{"docs":{},"保":{"docs":{},"存":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"到":{"docs":{},"内":{"docs":{},"存":{"docs":{},"和":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"宕":{"docs":{},"后":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"可":{"docs":{},"以":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"转":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"宕":{"docs":{},"机":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"重":{"docs":{},"启":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"。":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},",":{"docs":{},"发":{"docs":{},"现":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"会":{"docs":{},"读":{"docs":{},"取":{"docs":{},"保":{"docs":{},"存":{"docs":{},"在":{"docs":{},"磁":{"docs":{},"盘":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{},"重":{"docs":{},"试":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"保":{"docs":{},"证":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"后":{"docs":{},",":{"docs":{},"更":{"docs":{},"新":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"细":{"docs":{},"节":{"docs":{},"这":{"docs":{},"一":{"docs":{},"块":{"docs":{},"由":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"体":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"本":{"docs":{},"地":{"docs":{},"代":{"docs":{},"理":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}},"类":{"docs":{},"型":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879}}}},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"容":{"docs":{},"器":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"加":{"docs":{},"载":{"docs":{},"内":{"docs":{},"容":{"docs":{},"。":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}}}}},"域":{"docs":{},"/":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"/":{"docs":{},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},"分":{"docs":{},"离":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"行":{"docs":{},"为":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"是":{"docs":{},"组":{"docs":{},"件":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"集":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"也":{"docs":{},"负":{"docs":{},"责":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"和":{"docs":{},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"安":{"docs":{},"装":{"docs":{},"包":{"docs":{},"仓":{"docs":{},"库":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.011363636363636364}}}}}}},"分":{"docs":{},"组":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"版":{"docs":{},"本":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"路":{"docs":{},"径":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"框":{"docs":{},"架":{"docs":{},"设":{"docs":{},"计":{"docs":{"design.html":{"ref":"design.html","tf":5.002994011976048}}}},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"都":{"docs":{},"继":{"docs":{},"承":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"将":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"或":{"docs":{},"组":{"docs":{},"件":{"docs":{},"通":{"docs":{},"常":{"docs":{},"有":{"docs":{},"两":{"docs":{},"类":{"docs":{},"客":{"docs":{},"户":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"。":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},",":{"docs":{},"它":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"那":{"docs":{},"至":{"docs":{},"少":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"请":{"docs":{},"求":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"应":{"docs":{},"该":{"docs":{},"要":{"docs":{},"有":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"没":{"docs":{},"有":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"公":{"docs":{},"用":{"docs":{},"的":{"docs":{},"框":{"docs":{},"架":{"docs":{},"可":{"docs":{},"以":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"模":{"docs":{},"块":{"docs":{},"中":{"docs":{},",":{"docs":{},"为":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"以":{"docs":{},"便":{"docs":{},"更":{"docs":{},"大":{"docs":{},"程":{"docs":{},"度":{"docs":{},"复":{"docs":{},"用":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"这":{"docs":{},"两":{"docs":{},"层":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"分":{"docs":{},"包":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"说":{"docs":{},"明":{"docs":{},":":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"与":{"docs":{},"分":{"docs":{},"包":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"式":{"docs":{},",":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}},"板":{"docs":{},"输":{"docs":{},"出":{"docs":{},"的":{"docs":{},"就":{"docs":{},"继":{"docs":{},"承":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"还":{"docs":{},"是":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"型":{"docs":{},"类":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"层":{"docs":{},":":{"docs":{},"封":{"docs":{},"装":{"docs":{},"服":{"docs":{},"务":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"与":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"以":{"docs":{},"服":{"docs":{},"务":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"基":{"docs":{},"于":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"下":{"docs":{},"发":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"集":{"docs":{},"群":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"对":{"docs":{},"各":{"docs":{},"种":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"总":{"docs":{},"不":{"docs":{},"返":{"docs":{},"回":{"docs":{},"空":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":5.002849002849003},"contribution.html":{"ref":"contribution.html","tf":0.015151515151515152}}}},"会":{"docs":{},"定":{"docs":{},"时":{"docs":{},"更":{"docs":{},"新":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"一":{"docs":{},"条":{"docs":{},"记":{"docs":{},"录":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"集":{"docs":{},"群":{"docs":{},"中":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"感":{"docs":{},"知":{"docs":{},"它":{"docs":{},"是":{"docs":{},"存":{"docs":{},"活":{"docs":{},"。":{"docs":{},"过":{"docs":{},"期":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"和":{"docs":{},"它":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"数":{"docs":{},"据":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"认":{"docs":{},"为":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}},"推":{"docs":{},"送":{"docs":{},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{},"推":{"docs":{},"送":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"地":{"docs":{},"址":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"入":{"docs":{},"其":{"docs":{},"它":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"直":{"docs":{},"接":{"docs":{},"依":{"docs":{},"赖":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}},"意":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"使":{"docs":{},"用":{"docs":{},"单":{"docs":{},"一":{"docs":{},"实":{"docs":{},"例":{"docs":{},"加":{"docs":{},"载":{"docs":{},"(":{"docs":{},"请":{"docs":{},"确":{"docs":{},"保":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},")":{"docs":{},",":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"在":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"里":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"是":{"docs":{},"放":{"docs":{},"在":{"docs":{},"你":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}},"解":{"docs":{},"在":{"docs":{},"接":{"docs":{},"口":{"docs":{},"方":{"docs":{},"法":{"docs":{},"上":{"docs":{},"提":{"docs":{},"供":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"上":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"户":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}},"要":{"docs":{},"配":{"docs":{},"合":{"docs":{},"的":{"docs":{},"职":{"docs":{},"责":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}},"法":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}},"请":{"docs":{},"求":{"docs":{},"参":{"docs":{},"数":{"docs":{},"作":{"docs":{},"为":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}},"一":{"docs":{},"个":{"docs":{},"无":{"docs":{},"效":{"docs":{},"值":{"docs":{},"代":{"docs":{},"表":{"docs":{},"关":{"docs":{},"闭":{"docs":{},",":{"docs":{},"n":{"docs":{},"/":{"docs":{},"a":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"0":{"docs":{},"重":{"docs":{},"试":{"docs":{},"次":{"docs":{},"数":{"docs":{},"等":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}},"到":{"docs":{},"的":{"docs":{},"原":{"docs":{},"则":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}},"于":{"docs":{},"当":{"docs":{},"出":{"docs":{},"现":{"docs":{},"异":{"docs":{},"常":{"docs":{},"场":{"docs":{},"景":{"docs":{},"时":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"影":{"docs":{},"响":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"的":{"docs":{},"正":{"docs":{},"常":{"docs":{},"调":{"docs":{},"用":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"开":{"docs":{},"启":{"docs":{},"无":{"docs":{},"用":{"docs":{},"的":{"docs":{},"连":{"docs":{},"接":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"来":{"docs":{},"确":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"信":{"docs":{},"息":{"docs":{},"通":{"docs":{},"过":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}},"监":{"docs":{},"控":{"docs":{},"层":{"docs":{},":":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"统":{"docs":{},"计":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"链":{"docs":{},"跟":{"docs":{},"踪":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"心":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":5.011764705882353},"contribution.html":{"ref":"contribution.html","tf":0.022727272727272728}}}}}}}},"等":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"加":{"docs":{},"载":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"此":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"自":{"docs":{},"动":{"docs":{},"激":{"docs":{},"活":{"docs":{},"来":{"docs":{},"简":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"类":{"docs":{},"配":{"docs":{},"置":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}},"它":{"docs":{},"们":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"协":{"docs":{},"议":{"docs":{},"都":{"docs":{},"已":{"docs":{},"生":{"docs":{},"成":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"将":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"代":{"docs":{},"理":{"docs":{},"转":{"docs":{},"成":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}},"于":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}},"工":{"docs":{},"具":{"docs":{},"的":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"基":{"docs":{},"本":{"docs":{},"都":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},",":{"docs":{},"也":{"docs":{},"能":{"docs":{},"理":{"docs":{},"解":{"docs":{},"它":{"docs":{},"的":{"docs":{},"好":{"docs":{},"处":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"工":{"docs":{},"作":{"docs":{},"量":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"要":{"docs":{},"特":{"docs":{},"别":{"docs":{},"强":{"docs":{},"调":{"docs":{},"的":{"docs":{},"是":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"单":{"docs":{},"一":{"docs":{},"性":{"docs":{},"(":{"docs":{},"只":{"docs":{},"测":{"docs":{},"目":{"docs":{},"标":{"docs":{},"类":{"docs":{},"本":{"docs":{},"身":{"docs":{},")":{"docs":{},"和":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"性":{"docs":{},"(":{"docs":{},"不":{"docs":{},"传":{"docs":{},"染":{"docs":{},"失":{"docs":{},"败":{"docs":{},")":{"docs":{},"。":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"过":{"docs":{},"于":{"docs":{},"强":{"docs":{},"调":{"docs":{},"完":{"docs":{},"备":{"docs":{},"性":{"docs":{},",":{"docs":{},"大":{"docs":{},"量":{"docs":{},"重":{"docs":{},"复":{"docs":{},"交":{"docs":{},"叉":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"没":{"docs":{},"啥":{"docs":{},"坏":{"docs":{},"处":{"docs":{},",":{"docs":{},"但":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"维":{"docs":{},"护":{"docs":{},"代":{"docs":{},"价":{"docs":{},"越":{"docs":{},"高":{"docs":{},"。":{"docs":{},"经":{"docs":{},"常":{"docs":{},"出":{"docs":{},"现":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"是":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"或":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{},"判":{"docs":{},"断":{"docs":{},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"引":{"docs":{},"起":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"服":{"docs":{},"务":{"docs":{},"域":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"比":{"docs":{},"较":{"docs":{},"重":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},",":{"docs":{},"并":{"docs":{},"以":{"docs":{},"单":{"docs":{},"一":{"docs":{},"实":{"docs":{},"例":{"docs":{},"服":{"docs":{},"务":{"docs":{},"于":{"docs":{},"所":{"docs":{},"有":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},"有":{"docs":{},"它":{"docs":{},"的":{"docs":{},"优":{"docs":{},"势":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"简":{"docs":{},"化":{"docs":{},"了":{"docs":{},"用":{"docs":{},"户":{"docs":{},"对":{"docs":{},"配":{"docs":{},"置":{"docs":{},"加":{"docs":{},"载":{"docs":{},"过":{"docs":{},"程":{"docs":{},"的":{"docs":{},"干":{"docs":{},"预":{"docs":{},"。":{"docs":{},"但":{"docs":{},"同":{"docs":{},"样":{"docs":{},"有":{"docs":{},"它":{"docs":{},"的":{"docs":{},"缺":{"docs":{},"点":{"docs":{},",":{"docs":{},"当":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"等":{"docs":{},"。":{"docs":{},"这":{"docs":{},"个":{"docs":{},"核":{"docs":{},"心":{"docs":{},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{},"及":{"docs":{},"其":{"docs":{},"组":{"docs":{},"成":{"docs":{},"部":{"docs":{},"分":{"docs":{},"称":{"docs":{},"为":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},",":{"docs":{},"它":{"docs":{},"代":{"docs":{},"表":{"docs":{},"着":{"docs":{},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"目":{"docs":{},"标":{"docs":{},"本":{"docs":{},"身":{"docs":{},"。":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"管":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},",":{"docs":{},"同":{"docs":{},"步":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"或":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"要":{"docs":{},"因":{"docs":{},"为":{"docs":{},"外":{"docs":{},"部":{"docs":{},"的":{"docs":{},"请":{"docs":{},"求":{"docs":{},"、":{"docs":{},"数":{"docs":{},"据":{"docs":{},"不":{"docs":{},"受":{"docs":{},"限":{"docs":{},"的":{"docs":{},"而":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"全":{"docs":{},"部":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"需":{"docs":{},"要":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"候":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"会":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"提":{"docs":{},"供":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"式":{"docs":{},"管":{"docs":{},"理":{"docs":{},"插":{"docs":{},"件":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"。":{"docs":{},"考":{"docs":{},"虑":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}},"类":{"docs":{},"和":{"docs":{},"通":{"docs":{},"用":{"docs":{},"模":{"docs":{},"型":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}},"加":{"docs":{},"载":{"docs":{},"失":{"docs":{},"败":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"失":{"docs":{},"败":{"docs":{},"原":{"docs":{},"因":{"docs":{},"被":{"docs":{},"吃":{"docs":{},"掉":{"docs":{},"了":{"docs":{},",":{"docs":{},"和":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"把":{"docs":{},"所":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"公":{"docs":{},"共":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"移":{"docs":{},"至":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"需":{"docs":{},"要":{"docs":{},"新":{"docs":{},"增":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}},"同":{"docs":{},"样":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.007792207792207792}},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"拿":{"docs":{},"到":{"docs":{},"对":{"docs":{},"外":{"docs":{},"提":{"docs":{},"供":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"实":{"docs":{},"际":{"docs":{},"类":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"种":{"docs":{},"是":{"docs":{},"最":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}},"将":{"docs":{},"所":{"docs":{},"有":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}},"而":{"docs":{},"且":{"docs":{},"和":{"docs":{},"j":{"docs":{},"v":{"docs":{},"m":{"docs":{},"加":{"docs":{},"载":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"有":{"docs":{},"关":{"docs":{},",":{"docs":{},"问":{"docs":{},"题":{"docs":{},"带":{"docs":{},"有":{"docs":{},"偶":{"docs":{},"然":{"docs":{},"性":{"docs":{},",":{"docs":{},"误":{"docs":{},"导":{"docs":{},"性":{"docs":{},",":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"这":{"docs":{},"种":{"docs":{},"莫":{"docs":{},"名":{"docs":{},"其":{"docs":{},"妙":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"最":{"docs":{},"头":{"docs":{},"疼":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"条":{"docs":{},",":{"docs":{},"先":{"docs":{},"把":{"docs":{},"它":{"docs":{},"防":{"docs":{},"住":{"docs":{},",":{"docs":{},"在":{"docs":{},"每":{"docs":{},"个":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"了":{"docs":{},"旧":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},"都":{"docs":{},"命":{"docs":{},"名":{"docs":{},"为":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}},"型":{"docs":{},"的":{"docs":{},"开":{"docs":{},"关":{"docs":{},",":{"docs":{},"再":{"docs":{},"配":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"包":{"docs":{},"装":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"网":{"docs":{},"络":{"docs":{},"传":{"docs":{},"输":{"docs":{},"层":{"docs":{},":":{"docs":{},"抽":{"docs":{},"象":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":5.005025125628141}}}}}},"通":{"docs":{},"讯":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"通":{"docs":{},"过":{"docs":{},"共":{"docs":{},"享":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"i":{"docs":{},"p":{"docs":{},"c":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"而":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},"对":{"docs":{},"于":{"docs":{},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"要":{"docs":{},"参":{"docs":{},"与":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"嵌":{"docs":{},"到":{"docs":{},"应":{"docs":{},"用":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},"中":{"docs":{},"。":{"docs":{},"现":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"底":{"docs":{},"层":{"docs":{},",":{"docs":{},"给":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"加":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"端":{"docs":{},"口":{"docs":{},"号":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"加":{"docs":{},"端":{"docs":{},"口":{"docs":{},"号":{"docs":{},"的":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"和":{"docs":{},"加":{"docs":{},"了":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"端":{"docs":{},"口":{"docs":{},"的":{"docs":{},"“":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"使":{"docs":{},"用":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"有":{"docs":{},"层":{"docs":{},"次":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"身":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"也":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}},"动":{"docs":{},"包":{"docs":{},"装":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"加":{"docs":{},"载":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}},"己":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"带":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"解":{"docs":{},"析":{"docs":{},"配":{"docs":{},"置":{"docs":{},"生":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"类":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}},"出":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.01038961038961039}}}},"服":{"docs":{},"务":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"语":{"docs":{},"义":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"次":{"docs":{},"数":{"docs":{},"和":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},"间":{"docs":{},"监":{"docs":{},"控":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}},"的":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"基":{"docs":{},"础":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"链":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}},"它":{"docs":{},"有":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"本":{"docs":{},"地":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"远":{"docs":{},"程":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"能":{"docs":{},"一":{"docs":{},"个":{"docs":{},"集":{"docs":{},"群":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"后":{"docs":{},"在":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"其":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"拦":{"docs":{},"截":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":5.008130081300813}}}}}},"参":{"docs":{},"数":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"超":{"docs":{},"时":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"研":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"路":{"docs":{},"由":{"docs":{},"层":{"docs":{},":":{"docs":{},"封":{"docs":{},"装":{"docs":{},"多":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"路":{"docs":{},"由":{"docs":{},"及":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{},"并":{"docs":{},"桥":{"docs":{},"接":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":5.014925373134329}}}}}},"转":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"或":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"现":{"docs":{},"转":{"docs":{},"成":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}},"为":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}},"换":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"为":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"(":{"docs":{},"如":{"docs":{},":":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"l":{"docs":{},"d":{"docs":{},")":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}},"业":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"到":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"层":{"docs":{},":":{"docs":{},"封":{"docs":{},"装":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"各":{"docs":{},"种":{"docs":{},"协":{"docs":{},"议":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"动":{"docs":{},"态":{"docs":{},"代":{"docs":{},"理":{"docs":{},",":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"集":{"docs":{},"群":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"通":{"docs":{},"讯":{"docs":{},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"及":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"传":{"docs":{},"输":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"地":{"docs":{},"址":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"端":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"用":{"docs":{},"上":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}},"核":{"docs":{},"心":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"没":{"docs":{},"有":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"配":{"docs":{},"置":{"docs":{},"层":{"docs":{},":":{"docs":{},"对":{"docs":{},"外":{"docs":{},"配":{"docs":{},"置":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"以":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"是":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}},"中":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"均":{"docs":{},"有":{"docs":{},"对":{"docs":{},"应":{"docs":{},"配":{"docs":{},"置":{"docs":{},"属":{"docs":{},"性":{"docs":{},"或":{"docs":{},"标":{"docs":{},"签":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"配":{"docs":{},"置":{"docs":{},"指":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"支":{"docs":{},"持":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"4":{"docs":{},"j":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},",":{"docs":{},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{},"e":{"docs":{},"s":{"docs":{},"等":{"docs":{},"。":{"docs":{},"产":{"docs":{},"品":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"从":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}},"和":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},"对":{"docs":{},"象":{"docs":{},"属":{"docs":{},"性":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"用":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}},"属":{"docs":{},"性":{"docs":{},"全":{"docs":{},"部":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"用":{"docs":{},"\"":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},"。":{"docs":{},"将":{"docs":{},"想":{"docs":{},"到":{"docs":{},"的":{"docs":{},"一":{"docs":{},"些":{"docs":{},"记":{"docs":{},"在":{"docs":{},"这":{"docs":{},",":{"docs":{},"备":{"docs":{},"忘":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"类":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}},"致":{"docs":{},"性":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"也":{"docs":{},"存":{"docs":{},"在":{"docs":{},"“":{"docs":{},"重":{"docs":{},"复":{"docs":{},"代":{"docs":{},"码":{"docs":{},"”":{"docs":{},",":{"docs":{},"也":{"docs":{},"存":{"docs":{},"在":{"docs":{},"“":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"与":{"docs":{},"精":{"docs":{},"化":{"docs":{},"”":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"会":{"docs":{},"比":{"docs":{},"较":{"docs":{},"方":{"docs":{},"便":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"树":{"docs":{},"结":{"docs":{},"构":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"表":{"docs":{},"现":{"docs":{},"力":{"docs":{},"更":{"docs":{},"强":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"非":{"docs":{},"常":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"是":{"docs":{},"一":{"docs":{},"些":{"docs":{},"离":{"docs":{},"散":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"值":{"docs":{},",":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"类":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"加":{"docs":{},"载":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"。":{"docs":{},"用":{"docs":{},"户":{"docs":{},"感":{"docs":{},"觉":{"docs":{},"非":{"docs":{},"常":{"docs":{},"不":{"docs":{},"便":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"中":{"docs":{},"进":{"docs":{},"行":{"docs":{},"了":{"docs":{},"合":{"docs":{},"并":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"放":{"docs":{},"到":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"从":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"也":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"学":{"docs":{},"习":{"docs":{},"成":{"docs":{},"本":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"向":{"docs":{},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"总":{"docs":{},"会":{"docs":{},"隐":{"docs":{},"含":{"docs":{},"一":{"docs":{},"些":{"docs":{},"风":{"docs":{},"格":{"docs":{},"或":{"docs":{},"潜":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"保":{"docs":{},"持":{"docs":{},"其":{"docs":{},"一":{"docs":{},"致":{"docs":{},"性":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"很":{"docs":{},"多":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"有":{"docs":{},"开":{"docs":{},"关":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"配":{"docs":{},"置":{"docs":{},"值":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"的":{"docs":{},"可":{"docs":{},"编":{"docs":{},"程":{"docs":{},"性":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"管":{"docs":{},"你":{"docs":{},"以":{"docs":{},"何":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"加":{"docs":{},"载":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"提":{"docs":{},"供":{"docs":{},"一":{"docs":{},"个":{"docs":{},"编":{"docs":{},"程":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"用":{"docs":{},"户":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"用":{"docs":{},"代":{"docs":{},"码":{"docs":{},"完":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"产":{"docs":{},"品":{"docs":{},",":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"是":{"docs":{},"组":{"docs":{},"件":{"docs":{},"类":{"docs":{},"产":{"docs":{},"品":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"和":{"docs":{},"其":{"docs":{},"它":{"docs":{},"产":{"docs":{},"品":{"docs":{},"协":{"docs":{},"作":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"集":{"docs":{},"成":{"docs":{},"你":{"docs":{},"的":{"docs":{},"产":{"docs":{},"品":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"需":{"docs":{},"要":{"docs":{},"适":{"docs":{},"配":{"docs":{},"配":{"docs":{},"置":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"普":{"docs":{},"遍":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"设":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{},"常":{"docs":{},"规":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"合":{"docs":{},"理":{"docs":{},"值":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"用":{"docs":{},"户":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"量":{"docs":{},"。":{"docs":{},"通":{"docs":{},"常":{"docs":{},"建":{"docs":{},"议":{"docs":{},"以":{"docs":{},"线":{"docs":{},"上":{"docs":{},"环":{"docs":{},"境":{"docs":{},"为":{"docs":{},"参":{"docs":{},"考":{"docs":{},"值":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},"适":{"docs":{},"应":{"docs":{},"。":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},"的":{"docs":{},"设":{"docs":{},"置":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"在":{"docs":{},"最":{"docs":{},"外":{"docs":{},"层":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"加":{"docs":{},"载":{"docs":{},"就":{"docs":{},"做":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{},"程":{"docs":{},"序":{"docs":{},"底":{"docs":{},"层":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"现":{"docs":{},"配":{"docs":{},"置":{"docs":{},"不":{"docs":{},"正":{"docs":{},"确":{"docs":{},",":{"docs":{},"就":{"docs":{},"应":{"docs":{},"该":{"docs":{},"直":{"docs":{},"接":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"容":{"docs":{},"错":{"docs":{},"在":{"docs":{},"最":{"docs":{},"外":{"docs":{},"层":{"docs":{},"做":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"底":{"docs":{},"层":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"发":{"docs":{},"现":{"docs":{},"配":{"docs":{},"置":{"docs":{},"值":{"docs":{},"不":{"docs":{},"合":{"docs":{},"理":{"docs":{},",":{"docs":{},"就":{"docs":{},"填":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"掩":{"docs":{},"盖":{"docs":{},"表":{"docs":{},"面":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"而":{"docs":{},"引":{"docs":{},"发":{"docs":{},"更":{"docs":{},"深":{"docs":{},"层":{"docs":{},"次":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"并":{"docs":{},"且":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"中":{"docs":{},"间":{"docs":{},"传":{"docs":{},"递":{"docs":{},"层":{"docs":{},",":{"docs":{},"很":{"docs":{},"可":{"docs":{},"能":{"docs":{},"并":{"docs":{},"不":{"docs":{},"知":{"docs":{},"道":{"docs":{},"底":{"docs":{},"层":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{},",":{"docs":{},"一":{"docs":{},"些":{"docs":{},"中":{"docs":{},"间":{"docs":{},"的":{"docs":{},"检":{"docs":{},"测":{"docs":{},"条":{"docs":{},"件":{"docs":{},"就":{"docs":{},"可":{"docs":{},"能":{"docs":{},"失":{"docs":{},"效":{"docs":{},"。":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"继":{"docs":{},"承":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"缺":{"docs":{},"省":{"docs":{},"值":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"覆":{"docs":{},"盖":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}},"设":{"docs":{},"计":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":5.005649717514125}}}},"进":{"docs":{},"行":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"集":{"docs":{},"成":{"docs":{},",":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"改":{"docs":{},"成":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"文":{"docs":{},"件":{"docs":{},"加":{"docs":{},"载":{"docs":{},"错":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"经":{"docs":{},"常":{"docs":{},"碰":{"docs":{},"到":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"用":{"docs":{},"户":{"docs":{},"通":{"docs":{},"常":{"docs":{},"会":{"docs":{},"和":{"docs":{},"你":{"docs":{},"说":{"docs":{},":":{"docs":{},"“":{"docs":{},"我":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"很":{"docs":{},"正":{"docs":{},"确":{"docs":{},"啊":{"docs":{},",":{"docs":{},"不":{"docs":{},"信":{"docs":{},"我":{"docs":{},"发":{"docs":{},"给":{"docs":{},"你":{"docs":{},"看":{"docs":{},"下":{"docs":{},",":{"docs":{},"但":{"docs":{},"就":{"docs":{},"是":{"docs":{},"报":{"docs":{},"错":{"docs":{},"”":{"docs":{},"。":{"docs":{},"然":{"docs":{},"后":{"docs":{},"查":{"docs":{},"一":{"docs":{},"圈":{"docs":{},"下":{"docs":{},"来":{"docs":{},",":{"docs":{},"原":{"docs":{},"来":{"docs":{},"他":{"docs":{},"发":{"docs":{},"过":{"docs":{},"来":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"根":{"docs":{},"本":{"docs":{},"没":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"平":{"docs":{},"台":{"docs":{},"很":{"docs":{},"多":{"docs":{},"产":{"docs":{},"品":{"docs":{},"都":{"docs":{},"会":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{"design.html":{"ref":"design.html","tf":0.005988023952095809}},"标":{"docs":{},"准":{"docs":{},"格":{"docs":{},"式":{"docs":{},":":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{},"p":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"@":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},":":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"/":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"?":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"=":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"&":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"=":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"方":{"docs":{},"法":{"docs":{},"超":{"docs":{},"时":{"docs":{},"继":{"docs":{},"承":{"docs":{},"服":{"docs":{},"务":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"超":{"docs":{},"时":{"docs":{},"再":{"docs":{},"继":{"docs":{},"承":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"超":{"docs":{},"时":{"docs":{},",":{"docs":{},"没":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"一":{"docs":{},"层":{"docs":{},"层":{"docs":{},"向":{"docs":{},"上":{"docs":{},"查":{"docs":{},"找":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"群":{"docs":{},"模":{"docs":{},"块":{"docs":{},":":{"docs":{},"将":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"伪":{"docs":{},"装":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},",":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":5.010416666666667}}}}},"合":{"docs":{},"容":{"docs":{},"量":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{"design.html":{"ref":"design.html","tf":0.0029940119760479044}},"中":{"docs":{},"非":{"docs":{},"常":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"设":{"docs":{},"计":{"docs":{},"思":{"docs":{},"路":{"docs":{},"都":{"docs":{},"是":{"docs":{},"向":{"docs":{},"它":{"docs":{},"靠":{"docs":{},"拢":{"docs":{},"。":{"docs":{},"这":{"docs":{},"就":{"docs":{},"使":{"docs":{},"得":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"\"":{"2":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"docs":{}}},"docs":{}}},"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.01601423487544484}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},"}":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"$":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"_":{"docs":{},"h":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{},"_":{"docs":{},"p":{"docs":{},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},".":{"docs":{},"\\":{"docs":{},"c":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.026690391459074734}}}}},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"m":{"docs":{},"p":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}}}},"o":{"docs":{},"k":{"docs":{},"!":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"2":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"先":{"docs":{},"在":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"docs":{}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}},"造":{"docs":{},"轮":{"docs":{},"者":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"实":{"docs":{},"现":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"o":{"docs":{},"b":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"接":{"docs":{},"口":{"docs":{},")":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"纯":{"docs":{},"文":{"docs":{},"本":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},":":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"x":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}}}}}}}},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}},"o":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},")":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},")":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"n":{"docs":{},"o":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"称":{"docs":{},"为":{"docs":{},"幽":{"docs":{},"灵":{"docs":{},"连":{"docs":{},"接":{"docs":{},")":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.02631578947368421},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.011396011396011397},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04020100502512563},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.028846153846153848},"impls/validation.html":{"ref":"impls/validation.html","tf":0.034482758620689655},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.044444444444444446}},")":{"docs":{},";":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},",":{"docs":{},"多":{"docs":{},"好":{"docs":{},"的":{"docs":{},"同":{"docs":{},"学":{"docs":{},",":{"docs":{},"看":{"docs":{},"到":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"人":{"docs":{},"复":{"docs":{},"制":{"docs":{},"一":{"docs":{},"下":{"docs":{},"就":{"docs":{},"完":{"docs":{},"事":{"docs":{},"了":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"该":{"docs":{},"学":{"docs":{},"学":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"把":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"故":{"docs":{},"意":{"docs":{},"犯":{"docs":{},"一":{"docs":{},"遍":{"docs":{},",":{"docs":{},"看":{"docs":{},"看":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},"能":{"docs":{},"否":{"docs":{},"自":{"docs":{},"我":{"docs":{},"搞":{"docs":{},"定":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"\\":{"docs":{},"c":{"docs":{},"\"":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"/":{"docs":{},"/":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.03508771929824561},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.011406844106463879},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.014245014245014245},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.024691358024691357},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.04020100502512563},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.017094017094017096},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.029411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.028846153846153848},"impls/validation.html":{"ref":"impls/validation.html","tf":0.034482758620689655},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.044444444444444446},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.014234875444839857},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992}},".":{"docs":{},".":{"docs":{},".":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"*":{"docs":{},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.019943019943019943}}}},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{},"r":{"docs":{},"/":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}},"i":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}},"m":{"docs":{},"p":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}},"u":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}},"v":{"docs":{},"m":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}},"s":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"s":{"docs":{},"o":{"docs":{},"f":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}}}}}}}}}}}},"=":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.017543859649122806},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.021352313167259787}},"=":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.010676156583629894},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}},"@":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"\"":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"6":{"0":{"docs":{},".":{"1":{"9":{"8":{"docs":{},"/":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},"/":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"/":{"docs":{},"c":{"docs":{},"a":{"docs":{},"r":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.019011406844106463},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02564102564102564}}}}}}},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855}}}}}}},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"(":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},",":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"2":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}},"docs":{"SPI.html":{"ref":"SPI.html","tf":0.010964912280701754},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"即":{"docs":{},"可":{"docs":{},"以":{"docs":{},"代":{"docs":{},"理":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"上":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"动":{"docs":{},"态":{"docs":{},"生":{"docs":{},"成":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"该":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"缓":{"docs":{},"存":{"docs":{},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},",":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}},"t":{"docs":{},")":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"增":{"docs":{},"加":{"docs":{},"一":{"docs":{},"种":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"通":{"docs":{},"过":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294},"code-smell.html":{"ref":"code-smell.html","tf":0.009433962264150943}},"e":{"docs":{},")":{"docs":{},"传":{"docs":{},"递":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},")":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"设":{"docs":{},"定":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"则":{"docs":{},"方":{"docs":{},"法":{"docs":{},"调":{"docs":{},"用":{"docs":{},"会":{"docs":{},"抛":{"docs":{},"出":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"在":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"i":{"docs":{},"d":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.022988505747126436}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.027777777777777776},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.027777777777777776},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02564102564102564},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.02512562814070352},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.010869565217391304}},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"要":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.012455516014234875},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},",":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}}}}}}}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"{":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.039473684210526314},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.030418250950570342},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.041666666666666664},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.06532663316582915},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.042735042735042736},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.04411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.057692307692307696},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05747126436781609},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05555555555555555},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.033807829181494664},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}},"}":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}},"\"":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"docs":{}}}},"y":{"docs":{},"y":{"docs":{},"y":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},"}":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}},"}":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.039473684210526314},"implementation.html":{"ref":"implementation.html","tf":0.012987012987012988},"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.03802281368821293},"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.041666666666666664},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.041666666666666664},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.03125},"impls/router.html":{"ref":"impls/router.html","tf":0.029850746268656716},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.02857142857142857},"impls/merger.html":{"ref":"impls/merger.html","tf":0.03389830508474576},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.047058823529411764},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.03389830508474576},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.037037037037037035},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.03278688524590164},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.03225806451612903},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.03333333333333333},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.03296703296703297},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.07537688442211055},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.042735042735042736},"impls/networker.html":{"ref":"impls/networker.html","tf":0.03389830508474576},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.023529411764705882},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.028169014084507043},"impls/container.html":{"ref":"impls/container.html","tf":0.04411764705882353},"impls/page.html":{"ref":"impls/page.html","tf":0.03278688524590164},"impls/cache.html":{"ref":"impls/cache.html","tf":0.057692307692307696},"impls/validation.html":{"ref":"impls/validation.html","tf":0.05747126436781609},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.05555555555555555},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.03558718861209965},"principals/extension.html":{"ref":"principals/extension.html","tf":0.016597510373443983},"code-smell.html":{"ref":"code-smell.html","tf":0.015723270440251572}},";":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}},"一":{"docs":{},"些":{"docs":{},"操":{"docs":{},"作":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}},"设":{"docs":{},"计":{"docs":{},"上":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"常":{"docs":{},"识":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":5.005434782608695}}}}}}}}}}},"样":{"docs":{},"约":{"docs":{},"定":{"docs":{},"一":{"docs":{},"个":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"部":{"docs":{},"分":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"便":{"docs":{},"于":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"真":{"docs":{},"正":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"它":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},"主":{"docs":{},"要":{"docs":{},"是":{"docs":{},"用":{"docs":{},"于":{"docs":{},"从":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"有":{"docs":{},"子":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"类":{"docs":{},"型":{"docs":{},"信":{"docs":{},"息":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}},"要":{"docs":{},"控":{"docs":{},"制":{"docs":{},"外":{"docs":{},"部":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}},"管":{"docs":{},"选":{"docs":{},"哪":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"保":{"docs":{},"持":{"docs":{},"同":{"docs":{},"一":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"会":{"docs":{},"版":{"docs":{},"本":{"docs":{},"过":{"docs":{},"多":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"开":{"docs":{},"发":{"docs":{},"和":{"docs":{},"维":{"docs":{},"护":{"docs":{},"成":{"docs":{},"本":{"docs":{},"剧":{"docs":{},"增":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}},"再":{"docs":{},"开":{"docs":{},"发":{"docs":{},",":{"docs":{},"应":{"docs":{},"用":{"docs":{},"碰":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"会":{"docs":{},"一":{"docs":{},"次":{"docs":{},"性":{"docs":{},"实":{"docs":{},"例":{"docs":{},"化":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"所":{"docs":{},"有":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"实":{"docs":{},"现":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"很":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"用":{"docs":{},"上":{"docs":{},"也":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"会":{"docs":{},"很":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"资":{"docs":{},"源":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},"执":{"docs":{},"行":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"装":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"同":{"docs":{},"时":{"docs":{},"接":{"docs":{},"收":{"docs":{},"事":{"docs":{},"件":{"docs":{},",":{"docs":{},"而":{"docs":{},"去":{"docs":{},"重":{"docs":{},"连":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"。":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"清":{"docs":{},"除":{"docs":{},"。":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"正":{"docs":{},"常":{"docs":{},"时":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"机":{"docs":{},"制":{"docs":{},"运":{"docs":{},"行":{"docs":{},"良":{"docs":{},"好":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"负":{"docs":{},"荷":{"docs":{},"高":{"docs":{},"时":{"docs":{},",":{"docs":{},"其":{"docs":{},"上":{"docs":{},"的":{"docs":{},"每":{"docs":{},"个":{"docs":{},"操":{"docs":{},"作":{"docs":{},"都":{"docs":{},"会":{"docs":{},"很":{"docs":{},"慢":{"docs":{},"。":{"docs":{},"这":{"docs":{},"就":{"docs":{},"出":{"docs":{},"现":{"docs":{},":":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"报":{"docs":{},"一":{"docs":{},"个":{"docs":{},"错":{"docs":{},",":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},"写":{"docs":{},"着":{"docs":{},":":{"docs":{},"请":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}},"火":{"docs":{},"速":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"自":{"docs":{},"动":{"docs":{},"生":{"docs":{},"成":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"(":{"docs":{},"通":{"docs":{},"过":{"docs":{},"字":{"docs":{},"节":{"docs":{},"码":{"docs":{},")":{"docs":{},",":{"docs":{},"并":{"docs":{},"将":{"docs":{},"其":{"docs":{},"实":{"docs":{},"例":{"docs":{},"注":{"docs":{},"入":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"值":{"docs":{},",":{"docs":{},"来":{"docs":{},"决":{"docs":{},"定":{"docs":{},"代":{"docs":{},"理":{"docs":{},"到":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"实":{"docs":{},"际":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}},"因":{"docs":{},"为":{"docs":{},"所":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"使":{"docs":{},"用":{"docs":{},"环":{"docs":{},"境":{"docs":{},"的":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"因":{"docs":{},"素":{"docs":{},"很":{"docs":{},"多":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"总":{"docs":{},"会":{"docs":{},"有":{"docs":{},"一":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"都":{"docs":{},"会":{"docs":{},"到":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"线":{"docs":{},"上":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"测":{"docs":{},"试":{"docs":{},"环":{"docs":{},"境":{"docs":{},"可":{"docs":{},"能":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"不":{"docs":{},"可":{"docs":{},"能":{"docs":{},"去":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"改":{"docs":{},"为":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"相":{"docs":{},"关":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"里":{"docs":{},"也":{"docs":{},"是":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"对":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"原":{"docs":{},"始":{"docs":{},"核":{"docs":{},"心":{"docs":{},"概":{"docs":{},"念":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"加":{"docs":{},"载":{"docs":{},"失":{"docs":{},"败":{"docs":{},",":{"docs":{},"连":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"都":{"docs":{},"拿":{"docs":{},"不":{"docs":{},"到":{"docs":{},"了":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"j":{"docs":{},"d":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"种":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"需":{"docs":{},"通":{"docs":{},"知":{"docs":{},"一":{"docs":{},"个":{"docs":{},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"y":{"docs":{},"协":{"docs":{},"议":{"docs":{},"并":{"docs":{},"带":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"性":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"个":{"docs":{},"类":{"docs":{},"可":{"docs":{},"以":{"docs":{},"成":{"docs":{},"为":{"docs":{},"不":{"docs":{},"变":{"docs":{},"类":{"docs":{},"(":{"docs":{},"i":{"docs":{},"m":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}},"是":{"docs":{},"d":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"的":{"docs":{},"持":{"docs":{},"久":{"docs":{},"存":{"docs":{},"储":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"找":{"docs":{},"不":{"docs":{},"到":{"docs":{},"注":{"docs":{},"册":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"则":{"docs":{},"抛":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"g":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"新":{"docs":{},"增":{"docs":{},"工":{"docs":{},"程":{"docs":{},",":{"docs":{},"黑":{"docs":{},"盒":{"docs":{},"依":{"docs":{},"赖":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}}}}}}}}}},"改":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"没":{"docs":{},"有":{"docs":{},"订":{"docs":{},"阅":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}},"不":{"docs":{},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"或":{"docs":{},"需":{"docs":{},"要":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"或":{"docs":{},"瞬":{"docs":{},"时":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"不":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}}}},"能":{"docs":{},",":{"docs":{},"给":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"和":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{},"这":{"docs":{},"让":{"docs":{},"维":{"docs":{},"护":{"docs":{},"和":{"docs":{},"问":{"docs":{},"题":{"docs":{},"解":{"docs":{},"决":{"docs":{},"变":{"docs":{},"得":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"寻":{"docs":{},"求":{"docs":{},"精":{"docs":{},"通":{"docs":{},"者":{"docs":{},"(":{"docs":{},"往":{"docs":{},"往":{"docs":{},"是":{"docs":{},"实":{"docs":{},"现":{"docs":{},"者":{"docs":{},")":{"docs":{},"的":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"要":{"docs":{},"写":{"docs":{},"个":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"那":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"要":{"docs":{},"写":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"原":{"docs":{},"封":{"docs":{},"不":{"docs":{},"动":{"docs":{},",":{"docs":{},"同":{"docs":{},"步":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},",":{"docs":{},"在":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"确":{"docs":{},"保":{"docs":{},"进":{"docs":{},"入":{"docs":{},"集":{"docs":{},"合":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"是":{"docs":{},"可":{"docs":{},"控":{"docs":{},"的":{"docs":{},"且":{"docs":{},"是":{"docs":{},"足":{"docs":{},"够":{"docs":{},"少":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"心":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"这":{"docs":{},"是":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"有":{"docs":{},"有":{"docs":{},"界":{"docs":{},"的":{"docs":{},"集":{"docs":{},"合":{"docs":{},"。":{"docs":{},"当":{"docs":{},"到":{"docs":{},"达":{"docs":{},"界":{"docs":{},"限":{"docs":{},"时":{"docs":{},",":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"丢":{"docs":{},"弃":{"docs":{},"策":{"docs":{},"略":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"f":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"m":{"docs":{},"f":{"docs":{},"规":{"docs":{},"范":{"docs":{},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{},"名":{"docs":{},"获":{"docs":{},"取":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},",":{"docs":{},"就":{"docs":{},"表":{"docs":{},"示":{"docs":{},"重":{"docs":{},"复":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"都":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"整":{"docs":{},"个":{"docs":{},"列":{"docs":{},"表":{"docs":{},"(":{"docs":{},"优":{"docs":{},"先":{"docs":{},"从":{"docs":{},"没":{"docs":{},"有":{"docs":{},"选":{"docs":{},"过":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"选":{"docs":{},"择":{"docs":{},")":{"docs":{},",":{"docs":{},"判":{"docs":{},"断":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"(":{"docs":{},"选":{"docs":{},"择":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"到":{"docs":{},"可":{"docs":{},"用":{"docs":{},"状":{"docs":{},"态":{"docs":{},")":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},",":{"docs":{},"则":{"docs":{},"进":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"调":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"步":{"docs":{},"选":{"docs":{},"择":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"从":{"docs":{},"剩":{"docs":{},"余":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"继":{"docs":{},"续":{"docs":{},"选":{"docs":{},"择":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"调":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"三":{"docs":{},"步":{"docs":{},"没":{"docs":{},"有":{"docs":{},"选":{"docs":{},"择":{"docs":{},"出":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},",":{"docs":{},"会":{"docs":{},"选":{"docs":{},"第":{"docs":{},"一":{"docs":{},"步":{"docs":{},"选":{"docs":{},"出":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"家":{"docs":{},"有":{"docs":{},"兴":{"docs":{},"趣":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"一":{"docs":{},"起":{"docs":{},"研":{"docs":{},"究":{"docs":{},",":{"docs":{},"和":{"docs":{},"行":{"docs":{},"知":{"docs":{},"一":{"docs":{},"块":{"docs":{},"讨":{"docs":{},"论":{"docs":{},"。":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},"准":{"docs":{},"备":{"docs":{},"一":{"docs":{},"个":{"docs":{},"标":{"docs":{},"志":{"docs":{},",":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},"后":{"docs":{},"打":{"docs":{},"日":{"docs":{},"志":{"docs":{},"后":{"docs":{},"设":{"docs":{},"置":{"docs":{},"标":{"docs":{},"志":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"打":{"docs":{},"日":{"docs":{},"志":{"docs":{},"。":{"docs":{},"问":{"docs":{},"题":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"后":{"docs":{},"清":{"docs":{},"除":{"docs":{},"标":{"docs":{},"志":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"没":{"docs":{},"有":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"如":{"docs":{},"没":{"docs":{},"有":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"当":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},"上":{"docs":{},"面":{"docs":{},"执":{"docs":{},"行":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"配":{"docs":{},"置":{"docs":{},"了":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"参":{"docs":{},"数":{"docs":{},"为":{"docs":{},"有":{"docs":{},"效":{"docs":{},"值":{"docs":{},"时":{"docs":{},"激":{"docs":{},"活":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"配":{"docs":{},"了":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"=":{"docs":{},"\"":{"docs":{},"l":{"docs":{},"r":{"docs":{},"u":{"docs":{},"\"":{"docs":{},",":{"docs":{},"自":{"docs":{},"动":{"docs":{},"激":{"docs":{},"活":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"中":{"docs":{},"有":{"docs":{},"设":{"docs":{},"置":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"时":{"docs":{},",":{"docs":{},"连":{"docs":{},"接":{"docs":{},"失":{"docs":{},"败":{"docs":{},"不":{"docs":{},"能":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"需":{"docs":{},"内":{"docs":{},"部":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"置":{"docs":{},"了":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"y":{"docs":{},"=":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"s":{"docs":{},"时":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"分":{"docs":{},"类":{"docs":{},"存":{"docs":{},"储":{"docs":{},",":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"类":{"docs":{},"别":{"docs":{},"为":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},",":{"docs":{},"可":{"docs":{},"按":{"docs":{},"分":{"docs":{},"类":{"docs":{},"部":{"docs":{},"分":{"docs":{},"通":{"docs":{},"知":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"只":{"docs":{},"通":{"docs":{},"知":{"docs":{},"指":{"docs":{},"定":{"docs":{},"分":{"docs":{},"类":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"分":{"docs":{},"类":{"docs":{},"用":{"docs":{},"逗":{"docs":{},"号":{"docs":{},"分":{"docs":{},"隔":{"docs":{},",":{"docs":{},"并":{"docs":{},"允":{"docs":{},"许":{"docs":{},"星":{"docs":{},"号":{"docs":{},"通":{"docs":{},"配":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"所":{"docs":{},"有":{"docs":{},"分":{"docs":{},"类":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"时":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"失":{"docs":{},"败":{"docs":{},"后":{"docs":{},"不":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"在":{"docs":{},"后":{"docs":{},"台":{"docs":{},"定":{"docs":{},"时":{"docs":{},"重":{"docs":{},"试":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"失":{"docs":{},"败":{"docs":{},"后":{"docs":{},"不":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"在":{"docs":{},"后":{"docs":{},"台":{"docs":{},"定":{"docs":{},"时":{"docs":{},"重":{"docs":{},"试":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"持":{"docs":{},"久":{"docs":{},"存":{"docs":{},"储":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},",":{"docs":{},"当":{"docs":{},"注":{"docs":{},"册":{"docs":{},"者":{"docs":{},"出":{"docs":{},"现":{"docs":{},"断":{"docs":{},"电":{"docs":{},"等":{"docs":{},"情":{"docs":{},"况":{"docs":{},"异":{"docs":{},"常":{"docs":{},"退":{"docs":{},"出":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"自":{"docs":{},"动":{"docs":{},"删":{"docs":{},"除":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},"出":{"docs":{},"错":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"端":{"docs":{},"口":{"docs":{},"已":{"docs":{},"占":{"docs":{},"用":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"户":{"docs":{},"调":{"docs":{},"用":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},"所":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"时":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"需":{"docs":{},"相":{"docs":{},"应":{"docs":{},"执":{"docs":{},"行":{"docs":{},"同":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"远":{"docs":{},"端":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"连":{"docs":{},"接":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"失":{"docs":{},"败":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}},"有":{"docs":{},"服":{"docs":{},"务":{"docs":{},"引":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"触":{"docs":{},"发":{"docs":{},"该":{"docs":{},"事":{"docs":{},"件":{"docs":{},"。":{"docs":{"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"时":{"docs":{},",":{"docs":{},"触":{"docs":{},"发":{"docs":{},"该":{"docs":{},"事":{"docs":{},"件":{"docs":{},"。":{"docs":{"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"组":{"docs":{},"织":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{},"集":{"docs":{},"群":{"docs":{},",":{"docs":{},"并":{"docs":{},"伪":{"docs":{},"装":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"。":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"收":{"docs":{},"到":{"docs":{},"服":{"docs":{},"务":{"docs":{},"变":{"docs":{},"更":{"docs":{},"通":{"docs":{},"知":{"docs":{},"时":{"docs":{},"触":{"docs":{},"发":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"重":{"docs":{},"启":{"docs":{},",":{"docs":{},"网":{"docs":{},"络":{"docs":{},"抖":{"docs":{},"动":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"丢":{"docs":{},"失":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"断":{"docs":{},"线":{"docs":{},"自":{"docs":{},"动":{"docs":{},"删":{"docs":{},"除":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"请":{"docs":{},"求":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"置":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"=":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},"时":{"docs":{},"表":{"docs":{},"示":{"docs":{},"不":{"docs":{},"检":{"docs":{},"查":{"docs":{},"连":{"docs":{},"接":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"在":{"docs":{},"连":{"docs":{},"接":{"docs":{},"不":{"docs":{},"上":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"停":{"docs":{},"机":{"docs":{},"时":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"与":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"创":{"docs":{},"建":{"docs":{},"代":{"docs":{},"理":{"docs":{},"时":{"docs":{},",":{"docs":{},"暂":{"docs":{},"不":{"docs":{},"建":{"docs":{},"立":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"加":{"docs":{},"载":{"docs":{"SPI.html":{"ref":"SPI.html","tf":5.00219298245614}},"扩":{"docs":{},"展":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":5.016949152542373}}}}}},"发":{"docs":{},"现":{"docs":{},"机":{"docs":{},"制":{"docs":{},"加":{"docs":{},"强":{"docs":{},"而":{"docs":{},"来":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"调":{"docs":{},"用":{"docs":{},"会":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"参":{"docs":{},"数":{"docs":{},"(":{"docs":{},"或":{"docs":{},"是":{"docs":{},"参":{"docs":{},"数":{"docs":{},"有":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"成":{"docs":{},"员":{"docs":{},")":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}},"特":{"docs":{},"性":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"代":{"docs":{},"码":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"加":{"docs":{},"载":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"自":{"docs":{},"动":{"docs":{},"包":{"docs":{},"装":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"激":{"docs":{},"活":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"装":{"docs":{},"配":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"适":{"docs":{},"应":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"配":{"docs":{},"置":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"进":{"docs":{},"行":{"docs":{},"暴":{"docs":{},"露":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"都":{"docs":{},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"套":{"docs":{},"上":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},",":{"docs":{},"伪":{"docs":{},"装":{"docs":{},"成":{"docs":{},"单":{"docs":{},"个":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"加":{"docs":{},"载":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"可":{"docs":{},"从":{"docs":{},"不":{"docs":{},"同":{"docs":{},"容":{"docs":{},"器":{"docs":{},"加":{"docs":{},"载":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"组":{"docs":{},"合":{"docs":{},"将":{"docs":{},"关":{"docs":{},"系":{"docs":{},"由":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"基":{"docs":{},"类":{"docs":{},"与":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"重":{"docs":{},"构":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":5.004149377593361}}}},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"功":{"docs":{},"能":{"docs":{},"插":{"docs":{},"件":{"docs":{},"。":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.16666666666666666}}}}}}},"实":{"docs":{},"现":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":3.4999999999999996}}}},"接":{"docs":{},"口":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},"仅":{"docs":{},"用":{"docs":{},"于":{"docs":{},"系":{"docs":{},"统":{"docs":{},"集":{"docs":{},"成":{"docs":{},",":{"docs":{},"或":{"docs":{"impls/introduction.html":{"ref":"impls/introduction.html","tf":0.16666666666666666}}}}}}}}}}},"。":{"docs":{},"框":{"docs":{},"架":{"docs":{},"如":{"docs":{},"果":{"docs":{},"让":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"或":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"把":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},"职":{"docs":{},"责":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"单":{"docs":{},"一":{"docs":{},",":{"docs":{},"具":{"docs":{},"有":{"docs":{},"可":{"docs":{},"组":{"docs":{},"合":{"docs":{},"性":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"说":{"docs":{},"明":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}},"配":{"docs":{},"置":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"协":{"docs":{},"议":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"策":{"docs":{},"略":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"等":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}},"通":{"docs":{},"常":{"docs":{},"对":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"聚":{"docs":{},"合":{"docs":{},"要":{"docs":{},"求":{"docs":{},"比":{"docs":{},"较":{"docs":{},"高":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"产":{"docs":{},"品":{"docs":{},"需":{"docs":{},"要":{"docs":{},"发":{"docs":{},"现":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"加":{"docs":{},"入":{"docs":{},"产":{"docs":{},"品":{"docs":{},"内":{"docs":{},"部":{"docs":{},"。":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"契":{"docs":{},"约":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"j":{"docs":{},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{},".":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"在":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扫":{"docs":{},"描":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"所":{"docs":{},"有":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"到":{"docs":{},"所":{"docs":{},"有":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"持":{"docs":{},"有":{"docs":{},"了":{"docs":{},"实":{"docs":{},"际":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"。":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"方":{"docs":{},"法":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"操":{"docs":{},"作":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"调":{"docs":{},"用":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}},"名":{"docs":{},"的":{"docs":{},"点":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"串":{"docs":{},"。":{"docs":{},"即":{"docs":{},"对":{"docs":{},"于":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"转":{"docs":{},"换":{"docs":{},"成":{"docs":{},"业":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}},"中":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"做":{"docs":{},"渲":{"docs":{},"染":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"叫":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"混":{"docs":{},"在":{"docs":{},"了":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"给":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"控":{"docs":{},"制":{"docs":{},"输":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},",":{"docs":{},"方":{"docs":{},"法":{"docs":{},"名":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"过":{"docs":{},"去":{"docs":{},"式":{"docs":{},"的":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"有":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}},"里":{"docs":{},"面":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"用":{"docs":{},"的":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}},"改":{"docs":{},"进":{"docs":{},"了":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}},"成":{"docs":{},":":{"docs":{},"(":{"docs":{},"链":{"docs":{},"式":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"器":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"如":{"docs":{},"提":{"docs":{},"取":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}},"来":{"docs":{},"判":{"docs":{},"定":{"docs":{},"其":{"docs":{},"成":{"docs":{},"员":{"docs":{},"。":{"docs":{},"即":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}},",":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}},"基":{"docs":{},"于":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"它":{"docs":{},"主":{"docs":{},"要":{"docs":{},"是":{"docs":{},"打":{"docs":{},"开":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}},"通":{"docs":{},"过":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}},"得":{"docs":{},"到":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"打":{"docs":{},"开":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"口":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"是":{"docs":{},"给":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"用":{"docs":{},"来":{"docs":{},"写":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"的":{"docs":{},"。":{"docs":{},"然":{"docs":{},"后":{"docs":{},",":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"决":{"docs":{},"定":{"docs":{},"什":{"docs":{},"么":{"docs":{},"时":{"docs":{},"候":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"其":{"docs":{},"它":{"docs":{},"正":{"docs":{},"常":{"docs":{},"业":{"docs":{},"务":{"docs":{},"上":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"也":{"docs":{},"不":{"docs":{},"用":{"docs":{},"变":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"生":{"docs":{},"成":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}},"调":{"docs":{},"用":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"时":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"需":{"docs":{},"相":{"docs":{},"应":{"docs":{},"执":{"docs":{},"行":{"docs":{},"同":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"式":{"docs":{},",":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"管":{"docs":{},"理":{"docs":{},"插":{"docs":{},"件":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"无":{"docs":{},"条":{"docs":{},"件":{"docs":{},"自":{"docs":{},"动":{"docs":{},"激":{"docs":{},"活":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"时":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"h":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"注":{"docs":{},"入":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"累":{"docs":{},"加":{"docs":{},"所":{"docs":{},"有":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"需":{"docs":{},"要":{"docs":{},"判":{"docs":{},"断":{"docs":{},"是":{"docs":{},"否":{"docs":{},"是":{"docs":{},"回":{"docs":{},"调":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"回":{"docs":{},"调":{"docs":{},",":{"docs":{},"会":{"docs":{},"从":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}},"不":{"docs":{},"能":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"连":{"docs":{},"接":{"docs":{},"。":{"docs":{},"在":{"docs":{},"实":{"docs":{},"现":{"docs":{},"中":{"docs":{},"采":{"docs":{},"用":{"docs":{},"了":{"docs":{},"引":{"docs":{},"用":{"docs":{},"计":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"案":{"docs":{},",":{"docs":{},"但":{"docs":{},"为":{"docs":{},"了":{"docs":{},"防":{"docs":{},"范":{"docs":{},",":{"docs":{},"在":{"docs":{},"连":{"docs":{},"接":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"时":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"建":{"docs":{},"立":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"大":{"docs":{},"多":{"docs":{},"功":{"docs":{},"能":{"docs":{},"均":{"docs":{},"基":{"docs":{},"于":{"docs":{},"此":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"远":{"docs":{},"程":{"docs":{},"方":{"docs":{},"法":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"该":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"都":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"。":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"章":{"docs":{},"节":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{},"摘":{"docs":{},"录":{"docs":{},"自":{"docs":{},"梁":{"docs":{},"飞":{"docs":{},"在":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":0.25}}}}}}}}}}}}}}},"地":{"docs":{},"部":{"docs":{},"署":{"docs":{},"代":{"docs":{},"理":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"标":{"docs":{},"准":{"docs":{},"的":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.008771929824561403},"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"服":{"docs":{},"务":{"docs":{},"发":{"docs":{},"现":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"即":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}},"签":{"docs":{},"解":{"docs":{},"析":{"docs":{},"为":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"识":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"保":{"docs":{},"持":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}},"值":{"docs":{},"则":{"docs":{},"找":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}},"配":{"docs":{},"置":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"l":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}},"x":{"docs":{},"y":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678}}}}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082}}}}}}}}}}}}}}},"c":{"docs":{},"l":{"docs":{},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666}}}}}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"y":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"i":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"z":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"此":{"docs":{},"配":{"docs":{},"置":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"离":{"docs":{},"的":{"docs":{},"反":{"docs":{},"面":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"被":{"docs":{},"启":{"docs":{},"动":{"docs":{},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"完":{"docs":{},"全":{"docs":{},"分":{"docs":{},"开":{"docs":{},",":{"docs":{},"全":{"docs":{},"由":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0043859649122807015}}}}}}}}}}}},"约":{"docs":{},"定":{"docs":{"coding.html":{"ref":"coding.html","tf":0.022727272727272728},"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},":":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}},"脚":{"docs":{},"本":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"报":{"docs":{},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}},"之":{"docs":{},"前":{"docs":{},"调":{"docs":{},"用":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"获":{"docs":{},"取":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},"工":{"docs":{},"具":{"docs":{},"类":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}},"路":{"docs":{},"由":{"docs":{},"器":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}}}}}},"返":{"docs":{},"回":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"时":{"docs":{},",":{"docs":{},"包":{"docs":{},"装":{"docs":{},"在":{"docs":{},"真":{"docs":{},"正":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"外":{"docs":{},"。":{"docs":{},"即":{"docs":{},"从":{"docs":{"SPI.html":{"ref":"SPI.html","tf":0.0021929824561403508}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"命":{"docs":{},"令":{"docs":{},"。":{"docs":{},"查":{"docs":{},"询":{"docs":{},"方":{"docs":{},"法":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"幂":{"docs":{},"等":{"docs":{},"性":{"docs":{},"的":{"docs":{},",":{"docs":{},"无":{"docs":{},"副":{"docs":{},"作":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"不":{"docs":{},"改":{"docs":{},"变":{"docs":{},"任":{"docs":{},"何":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"调":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"为":{"docs":{},"空":{"docs":{},"返":{"docs":{},"回":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}},"从":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"release.html":{"ref":"release.html","tf":0.014084507042253521}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"发":{"docs":{},"现":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"者":{"docs":{},"方":{"docs":{},"中":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"进":{"docs":{},"行":{"docs":{},"调":{"docs":{},"用":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285}},"。":{"docs":{"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358}}}}}}}}}}}}}}}}}}},"文":{"docs":{},"件":{"docs":{},"加":{"docs":{},"载":{"docs":{},"路":{"docs":{},"由":{"docs":{},"规":{"docs":{},"则":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"侦":{"docs":{},"听":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"并":{"docs":{},"接":{"docs":{},"收":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},"发":{"docs":{},"来":{"docs":{},"的":{"docs":{},"各":{"docs":{},"种":{"docs":{},"请":{"docs":{},"求":{"docs":{},",":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"细":{"docs":{},"节":{"docs":{},"由":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}}}}}}}},"再":{"docs":{},"重":{"docs":{},"新":{"docs":{},"传":{"docs":{},"给":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"再":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},",":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"一":{"docs":{},"个":{"docs":{},"对":{"docs":{},"象":{"docs":{},"发":{"docs":{},"过":{"docs":{},"去":{"docs":{},"就":{"docs":{},"行":{"docs":{},"。":{"docs":{},"后":{"docs":{},"来":{"docs":{},"有":{"docs":{},"了":{"docs":{},"同":{"docs":{},"步":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"最":{"docs":{},"开":{"docs":{},"始":{"docs":{},",":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"都":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"接":{"docs":{},"口":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"透":{"docs":{},"明":{"docs":{},"化":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"就":{"docs":{},"是":{"docs":{},",":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}},"协":{"docs":{},"议":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"可":{"docs":{},"能":{"docs":{},"只":{"docs":{},"是":{"docs":{},"想":{"docs":{},"替":{"docs":{},"换":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"只":{"docs":{},"替":{"docs":{},"换":{"docs":{},"传":{"docs":{},"输":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"现":{"docs":{},"有":{"docs":{},"的":{"docs":{},":":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"过":{"docs":{},"程":{"docs":{},"细":{"docs":{},"节":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"参":{"docs":{},"数":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"中":{"docs":{},"的":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"查":{"docs":{},"询":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}},"验":{"docs":{},"证":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218}}}}}}}},",":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}},"或":{"docs":{},"者":{"docs":{},"像":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}},"回":{"docs":{},"调":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"(":{"docs":{},"整":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"网":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},")":{"docs":{},"。":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"即":{"docs":{},"是":{"docs":{},"从":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}},"见":{"docs":{},":":{"docs":{},"谈":{"docs":{},"谈":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"c":{"docs":{},"d":{"docs":{},"i":{"docs":{},"/":{"docs":{},"t":{"docs":{},"c":{"docs":{},"k":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"/":{"1":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"TCK.html":{"ref":"TCK.html","tf":0.03225806451612903}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.005194805194805195}}}},"现":{"docs":{},"自":{"docs":{},"己":{"docs":{},"数":{"docs":{},"据":{"docs":{},"被":{"docs":{},"删":{"docs":{},"除":{"docs":{},"时":{"docs":{},"(":{"docs":{},"写":{"docs":{},"入":{"docs":{},"失":{"docs":{},"败":{"docs":{},")":{"docs":{},",":{"docs":{},"选":{"docs":{},"择":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"段":{"docs":{},"时":{"docs":{},"间":{"docs":{},"再":{"docs":{},"重":{"docs":{},"试":{"docs":{},"。":{"docs":{},"重":{"docs":{},"试":{"docs":{},"时":{"docs":{},"间":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"指":{"docs":{},"数":{"docs":{},"级":{"docs":{},"增":{"docs":{},"长":{"docs":{},",":{"docs":{},"如":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"等":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"没":{"docs":{},"有":{"docs":{},"了":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"写":{"docs":{},"入":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"反":{"docs":{},"复":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"这":{"docs":{},"些":{"docs":{},"反":{"docs":{},"复":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"又":{"docs":{},"加":{"docs":{},"重":{"docs":{},"了":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"的":{"docs":{},"负":{"docs":{},"荷":{"docs":{},",":{"docs":{},"恶":{"docs":{},"化":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}},"问":{"docs":{},"题":{"docs":{},"、":{"docs":{},"添":{"docs":{},"加":{"docs":{},"测":{"docs":{},"试":{"docs":{},"(":{"docs":{},"集":{"docs":{},"成":{"docs":{},"测":{"docs":{},"试":{"docs":{},")":{"docs":{},"复":{"docs":{},"现":{"docs":{},"总":{"docs":{},"是":{"docs":{},";":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}}}}}}}}}}}}},"布":{"docs":{},"前":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"名":{"docs":{},"称":{"docs":{},"空":{"docs":{},"间":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"回":{"docs":{},"调":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},";":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"1":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"docs":{}}}}}},"向":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"前":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"很":{"docs":{},"好":{"docs":{},"办":{"docs":{},",":{"docs":{},"你":{"docs":{},"只":{"docs":{},"要":{"docs":{},"保":{"docs":{},"证":{"docs":{},"配":{"docs":{},"置":{"docs":{},"只":{"docs":{},"增":{"docs":{},"不":{"docs":{},"减":{"docs":{},",":{"docs":{},"就":{"docs":{},"基":{"docs":{},"本":{"docs":{},"上":{"docs":{},"能":{"docs":{},"保":{"docs":{},"证":{"docs":{},"向":{"docs":{},"前":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"。":{"docs":{},"但":{"docs":{},"向":{"docs":{},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},",":{"docs":{},"要":{"docs":{},"为":{"docs":{},"后":{"docs":{},"续":{"docs":{},"加":{"docs":{},"入":{"docs":{},"新":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"做":{"docs":{},"好":{"docs":{},"准":{"docs":{},"备":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"配":{"docs":{},"置":{"docs":{},"出":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"就":{"docs":{},"应":{"docs":{},"该":{"docs":{},"为":{"docs":{},"这":{"docs":{},"个":{"docs":{},"“":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"”":{"docs":{},"情":{"docs":{},"况":{"docs":{},"约":{"docs":{},"定":{"docs":{},"一":{"docs":{},"个":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"个":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"很":{"docs":{},"有":{"docs":{},"可":{"docs":{},"能":{"docs":{},"在":{"docs":{},"以":{"docs":{},"后":{"docs":{},"还":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"是":{"docs":{},"保":{"docs":{},"存":{"docs":{},"“":{"docs":{},"服":{"docs":{},"务":{"docs":{},"=":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"映":{"docs":{},"射":{"docs":{},"关":{"docs":{},"系":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{},"有":{"docs":{},"一":{"docs":{},"行":{"docs":{},"特":{"docs":{},"殊":{"docs":{},",":{"docs":{},"保":{"docs":{},"存":{"docs":{},"的":{"docs":{},"是":{"docs":{},"“":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"=":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},"。":{"docs":{},"现":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},",":{"docs":{},"约":{"docs":{},"定":{"docs":{},"“":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"”":{"docs":{},"这":{"docs":{},"个":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"是":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"的":{"docs":{},",":{"docs":{},"做":{"docs":{},"特":{"docs":{},"别":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"都":{"docs":{},"是":{"docs":{},"“":{"docs":{},"服":{"docs":{},"务":{"docs":{},"”":{"docs":{},"。":{"docs":{},"然":{"docs":{},"而":{"docs":{},",":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"要":{"docs":{},"加":{"docs":{},"一":{"docs":{},"项":{"docs":{},"“":{"docs":{},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},"=":{"docs":{},"地":{"docs":{},"址":{"docs":{},"”":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},",":{"docs":{},"旧":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"会":{"docs":{},"把":{"docs":{},"“":{"docs":{},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},"”":{"docs":{},"做":{"docs":{},"为":{"docs":{},"“":{"docs":{},"服":{"docs":{},"务":{"docs":{},"”":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"旧":{"docs":{},"代":{"docs":{},"码":{"docs":{},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"改":{"docs":{},"的":{"docs":{},",":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},"就":{"docs":{},"很":{"docs":{},"会":{"docs":{},"很":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"先":{"docs":{},"前":{"docs":{},"约":{"docs":{},"定":{"docs":{},"“":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"标":{"docs":{},"识":{"docs":{},"+":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"”":{"docs":{},"为":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"后":{"docs":{},"续":{"docs":{},"就":{"docs":{},"会":{"docs":{},"方":{"docs":{},"便":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"多":{"docs":{},"向":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"5":{"docs":{},"学":{"docs":{},"习":{"docs":{},",":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"h":{"docs":{},"t":{"docs":{},"m":{"docs":{},"l":{"5":{"docs":{},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"理":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"服":{"docs":{},"务":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"的":{"docs":{},"关":{"docs":{},"键":{"docs":{},"就":{"docs":{},"在":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}},"。":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}},",":{"docs":{},"会":{"docs":{},"话":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}},"于":{"docs":{},"可":{"docs":{},"用":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"则":{"docs":{},"进":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"调":{"docs":{},"用":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}},"属":{"docs":{},"性":{"docs":{},"转":{"docs":{},"成":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"底":{"docs":{},"层":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"这":{"docs":{},"就":{"docs":{},"省":{"docs":{},"了":{"docs":{},"不":{"docs":{},"少":{"docs":{},"工":{"docs":{},"作":{"docs":{},"量":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"渗":{"docs":{},"透":{"docs":{},"在":{"docs":{},"整":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"代":{"docs":{},"码":{"docs":{},"里":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"刚":{"docs":{},"开":{"docs":{},"始":{"docs":{},"接":{"docs":{},"触":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"满":{"docs":{},"眼":{"docs":{},"都":{"docs":{},"是":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"然":{"docs":{},"后":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}},"生":{"docs":{},"成":{"docs":{},"一":{"docs":{},"个":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}},"的":{"docs":{},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"类":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}},"由":{"docs":{},"于":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}},"开":{"docs":{},"发":{"docs":{},"只":{"docs":{},"会":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}},"自":{"docs":{},"适":{"docs":{},"应":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"议":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"通":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"此":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"传":{"docs":{},"入":{"docs":{},",":{"docs":{},"协":{"docs":{},"议":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"心":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"插":{"docs":{},"件":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"管":{"docs":{},"理":{"docs":{},"容":{"docs":{},"器":{"docs":{},",":{"docs":{},"构":{"docs":{},"成":{"docs":{},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},",":{"docs":{},"核":{"docs":{},"心":{"docs":{},"不":{"docs":{},"包":{"docs":{},"括":{"docs":{},"任":{"docs":{},"何":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"确":{"docs":{},"保":{"docs":{},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"能":{"docs":{},"被":{"docs":{},"替":{"docs":{},"换":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"作":{"docs":{},"者":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"也":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},",":{"docs":{},"以":{"docs":{},"保":{"docs":{},"证":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"自":{"docs":{},"身":{"docs":{},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"也":{"docs":{},"要":{"docs":{},"用":{"docs":{},"插":{"docs":{},"件":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"硬":{"docs":{},"编":{"docs":{},"码":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"直":{"docs":{},"连":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}},"扫":{"docs":{},"某":{"docs":{},"个":{"docs":{},"指":{"docs":{},"定":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},"允":{"docs":{},"许":{"docs":{},"指":{"docs":{},"定":{"docs":{},"配":{"docs":{},"置":{"docs":{},"路":{"docs":{},"径":{"docs":{},"。":{"docs":{},"做":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"做":{"docs":{},"到":{"docs":{},"凡":{"docs":{},"是":{"docs":{},"能":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"做":{"docs":{},"的":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"编":{"docs":{},"程":{"docs":{},"方":{"docs":{},"式":{"docs":{},"进":{"docs":{},"行":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"当":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"你":{"docs":{},"的":{"docs":{},"框":{"docs":{},"架":{"docs":{},"与":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"框":{"docs":{},"架":{"docs":{},"集":{"docs":{},"成":{"docs":{},"时":{"docs":{},"就":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"很":{"docs":{},"多":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"接":{"docs":{},"使":{"docs":{},"远":{"docs":{},"程":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"绕":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"增":{"docs":{},"加":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"按":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"部":{"docs":{},"署":{"docs":{},"情":{"docs":{},"况":{"docs":{},"做":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"派":{"docs":{},"发":{"docs":{},"模":{"docs":{},"型":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}},"池":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":5.016666666666667}}}},"(":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"和":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"组":{"docs":{},"装":{"docs":{},"成":{"docs":{},"链":{"docs":{},",":{"docs":{},"在":{"docs":{},"链":{"docs":{},"的":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"节":{"docs":{},"调":{"docs":{},"用":{"docs":{},"真":{"docs":{},"实":{"docs":{},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},",":{"docs":{},"在":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"和":{"docs":{},"引":{"docs":{},"用":{"docs":{},"前":{"docs":{},"后":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"回":{"docs":{},"调":{"docs":{},"。":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}}}}}},"网":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/networker.html":{"ref":"impls/networker.html","tf":5.016949152542373}}}}},"合":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"指":{"docs":{},":":{"docs":{},"将":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"正":{"docs":{},"交":{"docs":{},"分":{"docs":{},"解":{"docs":{},",":{"docs":{},"取":{"docs":{},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"交":{"docs":{},"集":{"docs":{},",":{"docs":{},"新":{"docs":{},"加":{"docs":{},"功":{"docs":{},"能":{"docs":{},"总":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"之":{"docs":{},"上":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"解":{"docs":{},"析":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},"属":{"docs":{},"性":{"docs":{},"映":{"docs":{},"射":{"docs":{},",":{"docs":{},"将":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}}}}}}}}},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"适":{"docs":{},"应":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}},"配":{"docs":{},"对":{"docs":{},",":{"docs":{},"采":{"docs":{},"用":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"自":{"docs":{},"然":{"docs":{},"想":{"docs":{},"到":{"docs":{},",":{"docs":{},"无":{"docs":{},"状":{"docs":{},"态":{"docs":{},"消":{"docs":{},"息":{"docs":{},"其":{"docs":{},"实":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"没":{"docs":{},"有":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"选":{"docs":{},"择":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"选":{"docs":{},"择":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}},"程":{"docs":{},"间":{"docs":{},"通":{"docs":{},"讯":{"docs":{},"等":{"docs":{},"。":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}},"度":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"里":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"些":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"implementation.html":{"ref":"implementation.html","tf":0.0025974025974025974}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"加":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}},"*":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.07224334600760456},"impls/registry.html":{"ref":"impls/registry.html","tf":0.18518518518518517}},"/":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0076045627376425855},"impls/registry.html":{"ref":"impls/registry.html","tf":0.019943019943019943}}}},"|":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.04182509505703422},"impls/filter.html":{"ref":"impls/filter.html","tf":0.07317073170731707},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.125},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.125},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.09375},"impls/router.html":{"ref":"impls/router.html","tf":0.13432835820895522},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.12857142857142856},"impls/merger.html":{"ref":"impls/merger.html","tf":0.15254237288135594},"impls/registry.html":{"ref":"impls/registry.html","tf":0.02849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.11764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.15254237288135594},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.1111111111111111},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.14754098360655737},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.14516129032258066},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.15},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.12087912087912088},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.05527638190954774},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.09401709401709402},"impls/networker.html":{"ref":"impls/networker.html","tf":0.15254237288135594},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.10588235294117647},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.1267605633802817},"impls/container.html":{"ref":"impls/container.html","tf":0.1323529411764706},"impls/page.html":{"ref":"impls/page.html","tf":0.14754098360655737},"impls/cache.html":{"ref":"impls/cache.html","tf":0.08653846153846154},"impls/validation.html":{"ref":"impls/validation.html","tf":0.10344827586206896},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.1},"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}},"a":{"docs":{},"w":{"docs":{},"k":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"|":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}},"其":{"docs":{},"中":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}}}}}}}}}},"实":{"docs":{},"是":{"docs":{},"包":{"docs":{},"装":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928}}},"文":{"docs":{},"档":{"docs":{},"化":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"已":{"docs":{},"知":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/protocol.html":{"ref":"impls/protocol.html","tf":0.0038022813688212928},"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}},"注":{"docs":{},"册":{"docs":{},"信":{"docs":{},"息":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"含":{"docs":{},"义":{"docs":{},"同":{"docs":{},"{":{"docs":{},"@":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}},"总":{"docs":{},"不":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"含":{"docs":{},"义":{"docs":{},"同":{"docs":{},"{":{"docs":{},"@":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}},"认":{"docs":{},"领":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"y":{"docs":{},"y":{"docs":{},"i":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"先":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}},"后":{"docs":{},"。":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.016260162601626018}}}},"间":{"docs":{},"的":{"docs":{},"网":{"docs":{},"络":{"docs":{},"不":{"docs":{},"通":{"docs":{},",":{"docs":{},"请":{"docs":{},"在":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"同":{"docs":{},"时":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}},"一":{"docs":{},"个":{"docs":{},"或":{"docs":{},"是":{"docs":{},"一":{"docs":{},"类":{"docs":{},"异":{"docs":{},"常":{"docs":{},"日":{"docs":{},"志":{"docs":{},"连":{"docs":{},"续":{"docs":{},"出":{"docs":{},"现":{"docs":{},"几":{"docs":{},"十":{"docs":{},"遍":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"常":{"docs":{},"常":{"docs":{},"能":{"docs":{},"看":{"docs":{},"到":{"docs":{},"的":{"docs":{},"。":{"docs":{},"人":{"docs":{},"眼":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"漏":{"docs":{},"掉":{"docs":{},"淹":{"docs":{},"没":{"docs":{},"在":{"docs":{},"其":{"docs":{},"中":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"重":{"docs":{},"要":{"docs":{},"日":{"docs":{},"志":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"要":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"避":{"docs":{},"免":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"在":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"加":{"docs":{},"一":{"docs":{},"些":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"来":{"docs":{},"避":{"docs":{},"免":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"问":{"docs":{},"题":{"docs":{},"不":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"记":{"docs":{},"录":{"docs":{},"多":{"docs":{},"次":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}},"均":{"docs":{},"会":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"要":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},",":{"docs":{},"需":{"docs":{},"配":{"docs":{},"置":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}},"特":{"docs":{},"殊":{"docs":{},"值":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},"符":{"docs":{},"号":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"开":{"docs":{},"启":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},":":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009},"impls/invoker-listener.html":{"ref":"impls/invoker-listener.html","tf":0.013888888888888888},"impls/exporter-listener.html":{"ref":"impls/exporter-listener.html","tf":0.013888888888888888},"impls/cluster.html":{"ref":"impls/cluster.html","tf":0.010416666666666666},"impls/router.html":{"ref":"impls/router.html","tf":0.014925373134328358},"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":0.014285714285714285},"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288},"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849},"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941},"impls/extension-factory.html":{"ref":"impls/extension-factory.html","tf":0.01694915254237288},"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":0.012345679012345678},"impls/compiler.html":{"ref":"impls/compiler.html","tf":0.01639344262295082},"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":0.016129032258064516},"impls/threadpool.html":{"ref":"impls/threadpool.html","tf":0.016666666666666666},"impls/serialize.html":{"ref":"impls/serialize.html","tf":0.01098901098901099},"impls/remoting.html":{"ref":"impls/remoting.html","tf":0.005025125628140704},"impls/exchanger.html":{"ref":"impls/exchanger.html","tf":0.008547008547008548},"impls/networker.html":{"ref":"impls/networker.html","tf":0.01694915254237288},"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941},"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521},"impls/container.html":{"ref":"impls/container.html","tf":0.014705882352941176},"impls/page.html":{"ref":"impls/page.html","tf":0.01639344262295082},"impls/cache.html":{"ref":"impls/cache.html","tf":0.009615384615384616},"impls/validation.html":{"ref":"impls/validation.html","tf":0.011494252873563218},"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}},"默":{"docs":{},"认":{"docs":{},"在":{"docs":{},"内":{"docs":{},"置":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}},"则":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}},"表":{"docs":{},"示":{"docs":{},"剔":{"docs":{},"除":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"\"":{"docs":{"impls/filter.html":{"ref":"impls/filter.html","tf":0.008130081300813009}}}}}}}}}}}}}}}}}},"并":{"docs":{},"且":{"docs":{},"属":{"docs":{},"性":{"docs":{},"也":{"docs":{},"一":{"docs":{},"对":{"docs":{},"一":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"有":{"docs":{},"利":{"docs":{},"于":{"docs":{},"文":{"docs":{},"件":{"docs":{},"配":{"docs":{},"置":{"docs":{},"与":{"docs":{},"编":{"docs":{},"程":{"docs":{},"配":{"docs":{},"置":{"docs":{},"的":{"docs":{},"一":{"docs":{},"致":{"docs":{},"性":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"学":{"docs":{},"习":{"docs":{},"成":{"docs":{},"本":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"以":{"docs":{},"这":{"docs":{},"个":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/load-balance.html":{"ref":"impls/load-balance.html","tf":5.014285714285714}}}}}}},"责":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"与":{"docs":{},"发":{"docs":{},"现":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"次":{"docs":{},"和":{"docs":{},"调":{"docs":{},"用":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"监":{"docs":{},"控":{"docs":{},"。":{"docs":{"impls/monitor.html":{"ref":"impls/monitor.html","tf":0.011764705882352941}}}}}}}}}}}}}}}}}},"合":{"docs":{},"并":{"docs":{},"结":{"docs":{},"果":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":5.016949152542373}}}}}},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"分":{"docs":{},"组":{"docs":{},"聚":{"docs":{},"合":{"docs":{},"。":{"docs":{"impls/merger.html":{"ref":"impls/merger.html","tf":0.01694915254237288}}}}}}}}}}}}}}},"理":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"是":{"docs":{},",":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"允":{"docs":{},"许":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{},"相":{"docs":{},"同":{"docs":{},"但":{"docs":{},"参":{"docs":{},"数":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"并":{"docs":{},"存":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},",":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"作":{"docs":{},"为":{"docs":{},"条":{"docs":{},"件":{"docs":{},"查":{"docs":{},"询":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}},"取":{"docs":{},"消":{"docs":{},"注":{"docs":{},"册":{"docs":{},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}},"并":{"docs":{},"且":{"docs":{},"查":{"docs":{},"询":{"docs":{},"条":{"docs":{},"件":{"docs":{},"允":{"docs":{},"许":{"docs":{},"星":{"docs":{},"号":{"docs":{},"通":{"docs":{},"配":{"docs":{},",":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"所":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"分":{"docs":{},"组":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"或":{"docs":{},":":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"*":{"docs":{},"&":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"=":{"docs":{},"*":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"约":{"docs":{},"定":{"docs":{},"所":{"docs":{},"有":{"docs":{},"插":{"docs":{},"件":{"docs":{},",":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"标":{"docs":{},"注":{"docs":{},":":{"docs":{},"@":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"加":{"docs":{},"载":{"docs":{},"后":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"性":{"docs":{},"名":{"docs":{},"称":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"配":{"docs":{},"置":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"过":{"docs":{},"程":{"docs":{},",":{"docs":{},"等":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"通":{"docs":{},"知":{"docs":{},"完":{"docs":{},"后":{"docs":{},"再":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}},"填":{"docs":{},"配":{"docs":{},"置":{"docs":{},"估":{"docs":{},"计":{"docs":{},"大":{"docs":{},"家":{"docs":{},"都":{"docs":{},"会":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"没":{"docs":{},"有":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"根":{"docs":{},"本":{"docs":{},"没":{"docs":{},"法":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{},"但":{"docs":{},"对":{"docs":{},"一":{"docs":{},"些":{"docs":{},"可":{"docs":{},"选":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"也":{"docs":{},"应":{"docs":{},"该":{"docs":{},"做":{"docs":{},"一":{"docs":{},"些":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"允":{"docs":{},"许":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"关":{"docs":{},"联":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"和":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},",":{"docs":{},"也":{"docs":{},"允":{"docs":{},"许":{"docs":{},"直":{"docs":{},"接":{"docs":{},"配":{"docs":{},"置":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"地":{"docs":{},"址":{"docs":{},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"直":{"docs":{},"连":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"是":{"docs":{},"可":{"docs":{},"选":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"配":{"docs":{},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"直":{"docs":{},"连":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},"就":{"docs":{},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"配":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},"候":{"docs":{},"也":{"docs":{},"要":{"docs":{},"做":{"docs":{},"相":{"docs":{},"应":{"docs":{},"检":{"docs":{},"查":{"docs":{},"。":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"总":{"docs":{},"是":{"docs":{},"以":{"docs":{},"服":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"和":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{},"维":{"docs":{},"度":{"docs":{},"全":{"docs":{},"量":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"即":{"docs":{},"不":{"docs":{},"会":{"docs":{},"通":{"docs":{},"知":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"部":{"docs":{},"分":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"比":{"docs":{},"上":{"docs":{},"一":{"docs":{},"次":{"docs":{},"通":{"docs":{},"知":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"按":{"docs":{},"全":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"取":{"docs":{},"消":{"docs":{},"注":{"docs":{},"册":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}},"订":{"docs":{},"阅":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"查":{"docs":{},"询":{"docs":{},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"册":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"与":{"docs":{},"订":{"docs":{},"阅":{"docs":{},"的":{"docs":{},"推":{"docs":{},"模":{"docs":{},"式":{"docs":{},"相":{"docs":{},"对":{"docs":{},"应":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"为":{"docs":{},"拉":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"只":{"docs":{},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"次":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"订":{"docs":{},"阅":{"docs":{},"时":{"docs":{},"的":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"类":{"docs":{},"型":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"全":{"docs":{},"量":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"地":{"docs":{},"址":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"条":{"docs":{},"件":{"docs":{},",":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"1":{"0":{"docs":{},".":{"2":{"0":{"docs":{},".":{"1":{"5":{"3":{"docs":{},".":{"1":{"0":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"b":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},".":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},".":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"?":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"1":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"&":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"=":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.005698005698005698}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}},"连":{"docs":{},"接":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},".":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}},"需":{"docs":{},"处":{"docs":{},"理":{"docs":{},"契":{"docs":{},"约":{"docs":{},":":{"docs":{"impls/registry.html":{"ref":"impls/registry.html","tf":0.002849002849002849}}}}}}}}}}}}}},"动":{"docs":{},"态":{"docs":{},"代":{"docs":{},"理":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/proxy-factory.html":{"ref":"impls/proxy-factory.html","tf":5.012345679012346},"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/compiler.html":{"ref":"impls/compiler.html","tf":5.016393442622951}}}}}},"码":{"docs":{},"约":{"docs":{},"定":{"docs":{"coding.html":{"ref":"coding.html","tf":5.007575757575758}}}}}},"消":{"docs":{},"息":{"docs":{},"派":{"docs":{},"发":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/dispatcher.html":{"ref":"impls/dispatcher.html","tf":5.016129032258065}}}}}}}},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/serialize.html":{"ref":"impls/serialize.html","tf":5.010989010989011},"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}}}}},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"人":{"docs":{},"工":{"docs":{},"干":{"docs":{},"预":{"docs":{},"。":{"docs":{"impls/telnet-handler.html":{"ref":"impls/telnet-handler.html","tf":0.011764705882352941}}}}}}}}}}}},"检":{"docs":{},"查":{"docs":{},"服":{"docs":{},"务":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"各":{"docs":{},"种":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"此":{"docs":{},"状":{"docs":{},"态":{"docs":{},"检":{"docs":{},"查":{"docs":{},"可":{"docs":{},"同":{"docs":{},"时":{"docs":{},"用":{"docs":{},"于":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"它":{"docs":{},"是":{"docs":{},"独":{"docs":{},"立":{"docs":{},"于":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"之":{"docs":{},"外":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"检":{"docs":{},"查":{"docs":{},"的":{"docs":{},"是":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"参":{"docs":{},"数":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"可":{"docs":{},"选":{"docs":{},"配":{"docs":{},"置":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}},"重":{"docs":{},"复":{"docs":{},"工":{"docs":{},"具":{"docs":{},"类":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"的":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},"列":{"docs":{},"表":{"docs":{"checklist.html":{"ref":"checklist.html","tf":5.021739130434782}}}}}},"状":{"docs":{},"态":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}},"检":{"docs":{},"查":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":5.014084507042254}}}}}},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"要":{"docs":{},"不":{"docs":{},"要":{"docs":{},"返":{"docs":{},"回":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}},"页":{"docs":{},"面":{"docs":{},"。":{"docs":{"impls/status-checker.html":{"ref":"impls/status-checker.html","tf":0.014084507042253521}}},"扩":{"docs":{},"展":{"docs":{"impls/page.html":{"ref":"impls/page.html","tf":5.016393442622951}}}}}},"缓":{"docs":{},"存":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/cache.html":{"ref":"impls/cache.html","tf":5.009615384615385}}}}}},"验":{"docs":{},"证":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/validation.html":{"ref":"impls/validation.html","tf":5.011494252873563}}}},"令":{"docs":{},"牌":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"日":{"docs":{},"志":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616},"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},"输":{"docs":{},"出":{"docs":{},"适":{"docs":{},"配":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"。":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":0.011111111111111112}}}}}}}}}},"适":{"docs":{},"配":{"docs":{},"扩":{"docs":{},"展":{"docs":{"impls/logger-adapter.html":{"ref":"impls/logger-adapter.html","tf":5.011111111111111}}}}}},"。":{"docs":{"contract.html":{"ref":"contract.html","tf":0.14285714285714285}}},"实":{"docs":{},"时":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{},"n":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"每":{"docs":{},"周":{"docs":{},"汇":{"docs":{},"总":{"docs":{},"发":{"docs":{},"送":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"表":{"docs":{},"示":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"动":{"docs":{},"恢":{"docs":{},"复":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}},"中":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"多":{"docs":{},"的":{"docs":{},"收":{"docs":{},"集":{"docs":{},"关":{"docs":{},"键":{"docs":{},"信":{"docs":{},"息":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}},"失":{"docs":{},"去":{"docs":{},"意":{"docs":{},"义":{"docs":{},"。":{"docs":{},"再":{"docs":{},"辅":{"docs":{},"以":{"docs":{},"人":{"docs":{},"工":{"docs":{},"定":{"docs":{},"期":{"docs":{},"查":{"docs":{},"看":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}},"是":{"docs":{},"发":{"docs":{},"现":{"docs":{},"问":{"docs":{},"题":{"docs":{},"、":{"docs":{},"查":{"docs":{},"看":{"docs":{},"问":{"docs":{},"题":{"docs":{},"一":{"docs":{},"个":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"手":{"docs":{},"段":{"docs":{},"。":{"docs":{},"日":{"docs":{},"志":{"docs":{},"质":{"docs":{},"量":{"docs":{},"往":{"docs":{},"往":{"docs":{},"被":{"docs":{},"忽":{"docs":{},"视":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"日":{"docs":{},"志":{"docs":{},"使":{"docs":{},"用":{"docs":{},"上":{"docs":{},"的":{"docs":{},"明":{"docs":{},"确":{"docs":{},"约":{"docs":{},"定":{"docs":{},"。":{"docs":{},"重":{"docs":{},"视":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"包":{"docs":{},"含":{"docs":{},"环":{"docs":{},"境":{"docs":{},"信":{"docs":{},"息":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"的":{"docs":{},"中":{"docs":{},"间":{"docs":{},"状":{"docs":{},"态":{"docs":{},"提":{"docs":{},"示":{"docs":{},",":{"docs":{},"打":{"docs":{},"印":{"docs":{"contract.html":{"ref":"contract.html","tf":0.047619047619047616}}}}}}}}}}}}}}}}},"保":{"docs":{},"持":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"速":{"docs":{},"度":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"将":{"docs":{},"性":{"docs":{},"能":{"docs":{},"和":{"docs":{},"大":{"docs":{},"的":{"docs":{},"集":{"docs":{},"成":{"docs":{},"用":{"docs":{},"例":{"docs":{},"放":{"docs":{},"在":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"中":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"每":{"docs":{},"个":{"docs":{},"用":{"docs":{},"例":{"docs":{},"都":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"少":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"有":{"docs":{},"助":{"docs":{},"于":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"开":{"docs":{},"放":{"docs":{},"的":{"docs":{},"系":{"docs":{},"统":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"重":{"docs":{},"要":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"各":{"docs":{},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"致":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"模":{"docs":{},"型":{"docs":{},",":{"docs":{},"能":{"docs":{},"相":{"docs":{},"互":{"docs":{},"指":{"docs":{},"引":{"docs":{},",":{"docs":{},"并":{"docs":{},"减":{"docs":{},"少":{"docs":{},"模":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"证":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},"和":{"docs":{},"可":{"docs":{},"见":{"docs":{},"性":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"单":{"docs":{},"元":{"docs":{},"和":{"docs":{},"集":{"docs":{},"成":{"docs":{},"测":{"docs":{},"试":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"测":{"docs":{},"试":{"docs":{},"统":{"docs":{},"一":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}},"子":{"docs":{},"包":{"docs":{},"下":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{},"实":{"docs":{},"现":{"docs":{},"用":{"docs":{},"放":{"docs":{},"在":{"docs":{},"以":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"名":{"docs":{},"字":{"docs":{},"命":{"docs":{},"名":{"docs":{},"的":{"docs":{},"子":{"docs":{},"包":{"docs":{},"下":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}},"完":{"docs":{},"成":{"docs":{},",":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"(":{"docs":{},"保":{"docs":{},"证":{"docs":{},"两":{"docs":{},"方":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"投":{"docs":{},"入":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}}}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"携":{"docs":{},"带":{"docs":{},"完":{"docs":{},"整":{"docs":{},"的":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"出":{"docs":{},"错":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"出":{"docs":{},"错":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"对":{"docs":{},"方":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"连":{"docs":{},"的":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"量":{"docs":{},"保":{"docs":{},"持":{"docs":{},"子":{"docs":{},"包":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"父":{"docs":{},"包":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"反":{"docs":{},"向":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}},"将":{"docs":{},"直":{"docs":{},"接":{"docs":{},"原":{"docs":{},"因":{"docs":{},"写":{"docs":{},"在":{"docs":{},"最":{"docs":{},"前":{"docs":{},"面":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"在":{"docs":{},"原":{"docs":{},"因":{"docs":{},"后":{"docs":{},"用":{"docs":{},"键":{"docs":{},"值":{"docs":{},"对":{"docs":{},"显":{"docs":{},"示":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"采":{"docs":{},"用":{"docs":{"coding.html":{"ref":"coding.html","tf":0.015151515151515152}}}}},"早":{"docs":{},"失":{"docs":{},"败":{"docs":{},"也":{"docs":{},"应":{"docs":{},"该":{"docs":{},"成":{"docs":{},"为":{"docs":{},"潜":{"docs":{},"意":{"docs":{},"识":{"docs":{},",":{"docs":{},"在":{"docs":{},"有":{"docs":{},"传":{"docs":{},"入":{"docs":{},"参":{"docs":{},"数":{"docs":{},"和":{"docs":{},"状":{"docs":{},"态":{"docs":{},"变":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"均":{"docs":{},"在":{"docs":{},"入":{"docs":{},"口":{"docs":{},"处":{"docs":{},"全":{"docs":{},"部":{"docs":{},"断":{"docs":{},"言":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"合":{"docs":{},"法":{"docs":{},"的":{"docs":{},"值":{"docs":{},"和":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"在":{"docs":{},"第":{"docs":{},"一":{"docs":{},"时":{"docs":{},"间":{"docs":{},"就":{"docs":{},"应":{"docs":{},"报":{"docs":{},"错":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"等":{"docs":{},"到":{"docs":{},"要":{"docs":{},"用":{"docs":{},"时":{"docs":{},"才":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"等":{"docs":{},"到":{"docs":{},"要":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"前":{"docs":{},"面":{"docs":{},"已":{"docs":{},"经":{"docs":{},"修":{"docs":{},"改":{"docs":{},"其":{"docs":{},"它":{"docs":{},"相":{"docs":{},"关":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"而":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"中":{"docs":{},"很":{"docs":{},"少":{"docs":{},"有":{"docs":{},"人":{"docs":{},"去":{"docs":{},"处":{"docs":{},"理":{"docs":{},"回":{"docs":{},"滚":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"报":{"docs":{},"错":{"docs":{},"后":{"docs":{},",":{"docs":{},"其":{"docs":{},"实":{"docs":{},"内":{"docs":{},"部":{"docs":{},"状":{"docs":{},"态":{"docs":{},"可":{"docs":{},"能":{"docs":{},"已":{"docs":{},"经":{"docs":{},"混":{"docs":{},"乱":{"docs":{},",":{"docs":{},"极":{"docs":{},"易":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"隐":{"docs":{},"蔽":{"docs":{},"分":{"docs":{},"支":{"docs":{},"上":{"docs":{},"引":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"不":{"docs":{},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"前":{"docs":{},"置":{"docs":{},"断":{"docs":{},"言":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}},"嵌":{"docs":{},"套":{"docs":{},",":{"docs":{},"保":{"docs":{},"持":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"建":{"docs":{},"议":{"docs":{},"应":{"docs":{},"用":{"docs":{},"方":{"docs":{},"在":{"docs":{},"监":{"docs":{},"控":{"docs":{},"中":{"docs":{},"心":{"docs":{},"配":{"docs":{},"置":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}},"异":{"docs":{},"常":{"docs":{},"和":{"docs":{},"日":{"docs":{},"志":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}},"防":{"docs":{},"御":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"异":{"docs":{},"常":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"给":{"docs":{},"出":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"案":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}},",":{"docs":{},"就":{"docs":{},"这":{"docs":{},"几":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"啥":{"docs":{},"都":{"docs":{},"没":{"docs":{},"有":{"docs":{},",":{"docs":{},"哪":{"docs":{},"个":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}},"循":{"docs":{},"环":{"docs":{},"等":{"docs":{},"待":{"docs":{},"结":{"docs":{},"果":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"对":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"和":{"docs":{},"网":{"docs":{},"络":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"用":{"docs":{},"以":{"docs":{},"将":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"中":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"抽":{"docs":{},"为":{"docs":{},"方":{"docs":{},"法":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"打":{"docs":{},"印":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}},"错":{"docs":{},"误":{"docs":{},"日":{"docs":{},"志":{"docs":{},",":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"基":{"docs":{},"本":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"抛":{"docs":{},"出":{"docs":{},"异":{"docs":{},"常":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"不":{"docs":{},"用":{"docs":{},"打":{"docs":{},"印":{"docs":{},"日":{"docs":{},"志":{"docs":{},",":{"docs":{},"由":{"docs":{},"最":{"docs":{},"终":{"docs":{},"处":{"docs":{},"理":{"docs":{},"异":{"docs":{},"常":{"docs":{},"者":{"docs":{},"决":{"docs":{},"定":{"docs":{},"打":{"docs":{},"印":{"docs":{},"日":{"docs":{},"志":{"docs":{},"的":{"docs":{},"级":{"docs":{},"别":{"docs":{},",":{"docs":{},"吃":{"docs":{},"掉":{"docs":{},"异":{"docs":{},"常":{"docs":{},"必":{"docs":{},"需":{"docs":{},"打":{"docs":{},"印":{"docs":{},"日":{"docs":{},"志":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"断":{"docs":{},"言":{"docs":{},"日":{"docs":{},"志":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}},"表":{"docs":{},"示":{"docs":{},"正":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},"或":{"docs":{},"完":{"docs":{},"全":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"运":{"docs":{},"行":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}}}}}}},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},",":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}},"黑":{"docs":{},"名":{"docs":{},"单":{"docs":{},",":{"docs":{},"这":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"雷":{"docs":{},",":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"修":{"docs":{},"改":{"docs":{},"者":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"你":{"docs":{},"自":{"docs":{},"己":{"docs":{},",":{"docs":{},"都":{"docs":{},"不":{"docs":{},"会":{"docs":{},"记":{"docs":{},"得":{"docs":{},"有":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"后":{"docs":{},"面":{"docs":{},"为":{"docs":{},"了":{"docs":{},"改":{"docs":{},"某":{"docs":{},"个":{"docs":{},"其":{"docs":{},"它":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}},"可":{"docs":{},"以":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"人":{"docs":{},"工":{"docs":{},"介":{"docs":{},"入":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"人":{"docs":{},"工":{"docs":{},"介":{"docs":{},"入":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{},"以":{"docs":{},"下":{"docs":{},"的":{"docs":{},"规":{"docs":{},"范":{"docs":{},":":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{},"。":{"docs":{"coding.html":{"ref":"coding.html","tf":0.007575757575757576}}}}}}},"设":{"docs":{},"计":{"docs":{},"原":{"docs":{},"则":{"docs":{"principals/introduction.html":{"ref":"principals/introduction.html","tf":5.25}}}},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"健":{"docs":{},"壮":{"docs":{},"性":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":5.010309278350515}}}}}}}},"或":{"docs":{},"实":{"docs":{},"现":{"docs":{},"不":{"docs":{},"优":{"docs":{},"雅":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"置":{"docs":{},"上":{"docs":{},"限":{"docs":{},"。":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{},"u":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"面":{"docs":{},"不":{"docs":{},"停":{"docs":{},"的":{"docs":{},"提":{"docs":{},"到":{"docs":{},"代":{"docs":{},"码":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"人":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"这":{"docs":{},"也":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"要":{"docs":{},"随":{"docs":{},"时":{"docs":{},"紧":{"docs":{},"记":{"docs":{},"的":{"docs":{},"。":{"docs":{},"这":{"docs":{},"个":{"docs":{},"其":{"docs":{},"他":{"docs":{},"人":{"docs":{},"包":{"docs":{},"括":{"docs":{},"未":{"docs":{},"来":{"docs":{},"的":{"docs":{},"自":{"docs":{},"己":{"docs":{},",":{"docs":{},"你":{"docs":{},"要":{"docs":{},"总":{"docs":{},"想":{"docs":{},"着":{"docs":{},"这":{"docs":{},"个":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"人":{"docs":{},"去":{"docs":{},"改":{"docs":{},"它":{"docs":{},"。":{"docs":{},"我":{"docs":{},"应":{"docs":{},"该":{"docs":{},"给":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"人":{"docs":{},"一":{"docs":{},"点":{"docs":{},"什":{"docs":{},"么":{"docs":{},"提":{"docs":{},"示":{"docs":{},",":{"docs":{},"让":{"docs":{},"他":{"docs":{},"知":{"docs":{},"道":{"docs":{},"我":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"意":{"docs":{},"图":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"要":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"里":{"docs":{},"面":{"docs":{},"加":{"docs":{},"潜":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"或":{"docs":{},"埋":{"docs":{},"一":{"docs":{},"些":{"docs":{},"容":{"docs":{},"易":{"docs":{},"忽":{"docs":{},"视":{"docs":{},"的":{"docs":{},"雷":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"你":{"docs":{},"用":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"不":{"docs":{},"通":{"docs":{},"过":{"docs":{},"。":{"docs":{},"时":{"docs":{},"间":{"docs":{},"一":{"docs":{},"紧":{"docs":{},",":{"docs":{},"谁":{"docs":{},"有":{"docs":{},"这":{"docs":{},"个":{"docs":{},"闲":{"docs":{},"功":{"docs":{},"夫":{"docs":{},"去":{"docs":{},"改":{"docs":{},"这":{"docs":{},"么":{"docs":{},"多":{"docs":{},"形":{"docs":{},"态":{"docs":{},"各":{"docs":{},"异":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"?":{"docs":{},"久":{"docs":{},"而":{"docs":{},"久":{"docs":{},"之":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"就":{"docs":{},"已":{"docs":{},"经":{"docs":{},"不":{"docs":{},"能":{"docs":{},"真":{"docs":{},"实":{"docs":{},"反":{"docs":{},"应":{"docs":{},"代":{"docs":{},"码":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"状":{"docs":{},"况":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"被":{"docs":{},"迫":{"docs":{},"绕":{"docs":{},"过":{"docs":{},"。":{"docs":{},"最":{"docs":{},"好":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"是":{"docs":{},",":{"docs":{},"修":{"docs":{},"改":{"docs":{},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"有":{"docs":{},"且":{"docs":{},"只":{"docs":{},"有":{"docs":{},"一":{"docs":{},"行":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"通":{"docs":{},"过":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"修":{"docs":{},"改":{"docs":{},"了":{"docs":{},"代":{"docs":{},"码":{"docs":{},"而":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"还":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"那":{"docs":{},"也":{"docs":{},"不":{"docs":{},"行":{"docs":{},",":{"docs":{},"表":{"docs":{},"示":{"docs":{},"测":{"docs":{},"试":{"docs":{},"没":{"docs":{},"有":{"docs":{},"覆":{"docs":{},"盖":{"docs":{},"到":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"可":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"项":{"docs":{},"目":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"每":{"docs":{},"天":{"docs":{},"都":{"docs":{},"要":{"docs":{},"去":{"docs":{},"帮":{"docs":{},"应":{"docs":{},"用":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"来":{"docs":{},"来":{"docs":{},"回":{"docs":{},"回":{"docs":{},",":{"docs":{},"发":{"docs":{},"现":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"都":{"docs":{},"是":{"docs":{},"配":{"docs":{},"置":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"或":{"docs":{},"类":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"网":{"docs":{},"络":{"docs":{},"不":{"docs":{},"通":{"docs":{},"等":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"准":{"docs":{},"备":{"docs":{},"在":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"中":{"docs":{},"加":{"docs":{},"入":{"docs":{},"防":{"docs":{},"痴":{"docs":{},"呆":{"docs":{},"设":{"docs":{},"计":{"docs":{},"。":{"docs":{},"估":{"docs":{},"且":{"docs":{},"这":{"docs":{},"么":{"docs":{},"叫":{"docs":{},"吧":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"排":{"docs":{},"错":{"docs":{},"速":{"docs":{},"度":{"docs":{},"还":{"docs":{},"是":{"docs":{},"有":{"docs":{},"点":{"docs":{},"帮":{"docs":{},"助":{"docs":{},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"能":{"docs":{},"抛":{"docs":{},"砖":{"docs":{},"引":{"docs":{},"玉":{"docs":{},",":{"docs":{},"也":{"docs":{},"希":{"docs":{},"望":{"docs":{},"大":{"docs":{},"家":{"docs":{},"多":{"docs":{},"给":{"docs":{},"力":{"docs":{},",":{"docs":{},"想":{"docs":{},"出":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"防":{"docs":{},"范":{"docs":{},"措":{"docs":{},"施":{"docs":{},"共":{"docs":{},"享":{"docs":{},"出":{"docs":{},"来":{"docs":{},"。":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"是":{"docs":{},"通":{"docs":{},"过":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}},"大":{"docs":{},"家":{"docs":{},"经":{"docs":{},"常":{"docs":{},"说":{"docs":{},",":{"docs":{},"魔":{"docs":{},"鬼":{"docs":{},"在":{"docs":{},"细":{"docs":{},"节":{"docs":{},"中":{"docs":{},",":{"docs":{},"确":{"docs":{},"实":{"docs":{},"如":{"docs":{},"此":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}},"凡":{"docs":{},"发":{"docs":{},"展":{"docs":{},"的":{"docs":{},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"的":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"都":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"微":{"docs":{},"核":{"docs":{},"的":{"docs":{},"理":{"docs":{},"念":{"docs":{},"。":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"是":{"docs":{},"隔":{"docs":{},"离":{"docs":{},"的":{"docs":{},"基":{"docs":{},"础":{"docs":{},",":{"docs":{},"把":{"docs":{},"间":{"docs":{},"接":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"屏":{"docs":{},"蔽":{"docs":{},"掉":{"docs":{},"。":{"docs":{},"可":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"最":{"docs":{},"大":{"docs":{},"的":{"docs":{},"杀":{"docs":{},"手":{"docs":{},"就":{"docs":{},"是":{"docs":{},"静":{"docs":{},"态":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"少":{"docs":{},"用":{"docs":{},"。":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"提":{"docs":{},"高":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"可":{"docs":{},"测":{"docs":{},"性":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}},"供":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"要":{"docs":{},"同":{"docs":{},"时":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"配":{"docs":{},"管":{"docs":{},"人":{"docs":{},"员":{"docs":{},",":{"docs":{},"系":{"docs":{},"统":{"docs":{},"管":{"docs":{},"理":{"docs":{},"员":{"docs":{},"。":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"是":{"docs":{},"不":{"docs":{},"能":{"docs":{},"修":{"docs":{},"改":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"环":{"docs":{},"境":{"docs":{},"很":{"docs":{},"可":{"docs":{},"能":{"docs":{},"较":{"docs":{},"为":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"为":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"留":{"docs":{},"一":{"docs":{},"些":{"docs":{},"“":{"docs":{},"后":{"docs":{},"门":{"docs":{},"”":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"外":{"docs":{},"围":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"。":{"docs":{},"就":{"docs":{},"像":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"近":{"docs":{},"一":{"docs":{},"直":{"docs":{},"担":{"docs":{},"心":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}},"给":{"docs":{},"团":{"docs":{},"队":{"docs":{},"新":{"docs":{},"人":{"docs":{},"讲":{"docs":{},"了":{"docs":{},"一":{"docs":{},"些":{"docs":{},"设":{"docs":{},"计":{"docs":{},"上":{"docs":{},"的":{"docs":{},"常":{"docs":{},"识":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"对":{"docs":{},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"新":{"docs":{},"人":{"docs":{},"也":{"docs":{},"有":{"docs":{},"些":{"docs":{},"帮":{"docs":{},"助":{"docs":{},",":{"docs":{},"把":{"docs":{},"暂":{"docs":{},"时":{"docs":{},"想":{"docs":{},"到":{"docs":{},"的":{"docs":{},"几":{"docs":{},"条":{"docs":{},",":{"docs":{},"先":{"docs":{},"记":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"点":{"docs":{},"痴":{"docs":{},"呆":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"解":{"docs":{},"决":{"docs":{},"了":{"docs":{},"太":{"docs":{},"多":{"docs":{},"的":{"docs":{},"痴":{"docs":{},"呆":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"实":{"docs":{},"施":{"docs":{},"面":{"docs":{},"超":{"docs":{},"来":{"docs":{},"超":{"docs":{},"广":{"docs":{},",":{"docs":{},"已":{"docs":{},"有":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"痴":{"docs":{},"呆":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"相":{"docs":{},"同":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"包":{"docs":{},",":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"终":{"docs":{},"决":{"docs":{},"定":{"docs":{},"采":{"docs":{},"用":{"docs":{},"的":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}},"缩":{"docs":{},"小":{"docs":{},"可":{"docs":{},"变":{"docs":{},"域":{"docs":{},"和":{"docs":{},"尽":{"docs":{},"量":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}},"防":{"docs":{},"止":{"docs":{},"空":{"docs":{},"指":{"docs":{},"针":{"docs":{},"和":{"docs":{},"下":{"docs":{},"标":{"docs":{},"越":{"docs":{},"界":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}},"御":{"docs":{},"性":{"docs":{},"容":{"docs":{},"错":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}}}}}},"痴":{"docs":{},"呆":{"docs":{},"设":{"docs":{},"计":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":5.001779359430605}}}}}}},"降":{"docs":{},"低":{"docs":{},"修":{"docs":{},"改":{"docs":{},"时":{"docs":{},"的":{"docs":{},"误":{"docs":{},"解":{"docs":{},"性":{"docs":{},",":{"docs":{},"不":{"docs":{},"埋":{"docs":{},"雷":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":0.015625}}}}}}}}}}}}}}},"魔":{"docs":{},"鬼":{"docs":{},"在":{"docs":{},"细":{"docs":{},"节":{"docs":{"principals/code-detail.html":{"ref":"principals/code-detail.html","tf":5.015625}}}}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"u":{"docs":{},"e":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}},"与":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652},"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"要":{"docs":{},"原":{"docs":{},"理":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},":":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}},"什":{"docs":{},"么":{"docs":{},"是":{"docs":{},"会":{"docs":{},"话":{"docs":{},"?":{"docs":{},"就":{"docs":{},"是":{"docs":{},"一":{"docs":{},"次":{"docs":{},"交":{"docs":{},"互":{"docs":{},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{},"会":{"docs":{},"话":{"docs":{},"中":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"是":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"是":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"?":{"docs":{},"比":{"docs":{},"如":{"docs":{},"我":{"docs":{},"们":{"docs":{},"说":{"docs":{},":":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"见":{"docs":{},"”":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"的":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"”":{"docs":{},"就":{"docs":{},"是":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"说":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"”":{"docs":{},"对":{"docs":{},"方":{"docs":{},"会":{"docs":{},"知":{"docs":{},"道":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"我":{"docs":{},"们":{"docs":{},"前":{"docs":{},"面":{"docs":{},"定":{"docs":{},"义":{"docs":{},"了":{"docs":{},"“":{"docs":{},"老":{"docs":{},"地":{"docs":{},"方":{"docs":{},"”":{"docs":{},"的":{"docs":{},"具":{"docs":{},"体":{"docs":{},"内":{"docs":{},"容":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"说":{"docs":{},",":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"通":{"docs":{},"常":{"docs":{},"持":{"docs":{},"有":{"docs":{},"交":{"docs":{},"互":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"变":{"docs":{},"量":{"docs":{},"等":{"docs":{},"。":{"docs":{},"会":{"docs":{},"话":{"docs":{},"对":{"docs":{},"象":{"docs":{},"通":{"docs":{},"常":{"docs":{},"较":{"docs":{},"轻":{"docs":{},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"请":{"docs":{},"求":{"docs":{},"都":{"docs":{},"重":{"docs":{},"新":{"docs":{},"创":{"docs":{},"建":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"请":{"docs":{},"求":{"docs":{},"结":{"docs":{},"束":{"docs":{},"后":{"docs":{},"销":{"docs":{},"毁":{"docs":{},"。":{"docs":{},"简":{"docs":{},"而":{"docs":{},"言":{"docs":{},"之":{"docs":{},":":{"docs":{},"把":{"docs":{},"元":{"docs":{},"信":{"docs":{},"息":{"docs":{},"交":{"docs":{},"由":{"docs":{},"实":{"docs":{},"体":{"docs":{},"域":{"docs":{},"持":{"docs":{},"有":{"docs":{},",":{"docs":{},"把":{"docs":{},"一":{"docs":{},"次":{"docs":{},"请":{"docs":{},"求":{"docs":{},"中":{"docs":{},"的":{"docs":{},"临":{"docs":{},"时":{"docs":{},"状":{"docs":{},"态":{"docs":{},"由":{"docs":{},"会":{"docs":{},"话":{"docs":{},"域":{"docs":{},"持":{"docs":{},"有":{"docs":{},",":{"docs":{},"由":{"docs":{},"服":{"docs":{},"务":{"docs":{},"域":{"docs":{},"贯":{"docs":{},"穿":{"docs":{},"整":{"docs":{},"个":{"docs":{},"过":{"docs":{},"程":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"原":{"docs":{},"因":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}},"任":{"docs":{},"何":{"docs":{},"框":{"docs":{},"架":{"docs":{},"或":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"总":{"docs":{},"会":{"docs":{},"有":{"docs":{},"核":{"docs":{},"心":{"docs":{},"领":{"docs":{},"域":{"docs":{},"模":{"docs":{},"型":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}},"务":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"住":{"docs":{},"所":{"docs":{},"有":{"docs":{},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"外":{"docs":{},"置":{"docs":{},"行":{"docs":{},"为":{"docs":{},",":{"docs":{},"是":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"人":{"docs":{},"想":{"docs":{},"在":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"前":{"docs":{},",":{"docs":{},"验":{"docs":{},"证":{"docs":{},"下":{"docs":{},"令":{"docs":{},"牌":{"docs":{},",":{"docs":{},"验":{"docs":{},"证":{"docs":{},"下":{"docs":{},"黑":{"docs":{},"白":{"docs":{},"名":{"docs":{},"单":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"下":{"docs":{},"日":{"docs":{},"志":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"人":{"docs":{},"想":{"docs":{},"在":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"做":{"docs":{},"为":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"要":{"docs":{},"用":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}},"参":{"docs":{},"考":{"docs":{},"值":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"没":{"docs":{},"有":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"就":{"docs":{},"以":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"为":{"docs":{},"准":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"继":{"docs":{},"承":{"docs":{},"了":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"的":{"docs":{},"建":{"docs":{},"议":{"docs":{},"配":{"docs":{},"置":{"docs":{},"值":{"docs":{},"。":{"docs":{},"而":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"中":{"docs":{},"途":{"docs":{},"修":{"docs":{},"改":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"就":{"docs":{},"达":{"docs":{},"到":{"docs":{},"了":{"docs":{},"治":{"docs":{},"理":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},",":{"docs":{},"继":{"docs":{},"承":{"docs":{},"关":{"docs":{},"系":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"候":{"docs":{},"这":{"docs":{},"类":{"docs":{},"配":{"docs":{},"置":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"框":{"docs":{},"架":{"docs":{},"就":{"docs":{},"控":{"docs":{},"制":{"docs":{},"了":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}},"区":{"docs":{},"分":{"docs":{},"命":{"docs":{},"令":{"docs":{},"与":{"docs":{},"查":{"docs":{},"询":{"docs":{},",":{"docs":{},"明":{"docs":{},"确":{"docs":{},"前":{"docs":{},"置":{"docs":{},"条":{"docs":{},"件":{"docs":{},"与":{"docs":{},"后":{"docs":{},"置":{"docs":{},"条":{"docs":{},"件":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"标":{"docs":{},"准":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"用":{"docs":{},"户":{"docs":{},"按":{"docs":{},"某":{"docs":{},"种":{"docs":{},"约":{"docs":{},"定":{"docs":{},"做":{"docs":{},"事":{"docs":{},"时":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"该":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"配":{"docs":{},"置":{"docs":{},"模":{"docs":{},"板":{"docs":{},"位":{"docs":{},"置":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"放":{"docs":{},"在":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"都":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"前":{"docs":{},"置":{"docs":{},"断":{"docs":{},"言":{"docs":{},"传":{"docs":{},"入":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{},"合":{"docs":{},"法":{"docs":{},"性":{"docs":{},",":{"docs":{},"后":{"docs":{},"置":{"docs":{},"断":{"docs":{},"言":{"docs":{},"返":{"docs":{},"回":{"docs":{},"结":{"docs":{},"果":{"docs":{},"的":{"docs":{},"合":{"docs":{},"法":{"docs":{},"性":{"docs":{},",":{"docs":{},"并":{"docs":{},"文":{"docs":{},"档":{"docs":{},"化":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"尽":{"docs":{},"相":{"docs":{},"同":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"只":{"docs":{},"是":{"docs":{},"策":{"docs":{},"略":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"替":{"docs":{},"换":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"考":{"docs":{},"虑":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"微":{"docs":{},"核":{"docs":{},"插":{"docs":{},"件":{"docs":{},"式":{"docs":{},",":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"前":{"docs":{},"加":{"docs":{},"下":{"docs":{},"分":{"docs":{},"页":{"docs":{},"包":{"docs":{},"装":{"docs":{},",":{"docs":{},"做":{"docs":{},"下":{"docs":{},"数":{"docs":{},"据":{"docs":{},"权":{"docs":{},"限":{"docs":{},"控":{"docs":{},"制":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"下":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"间":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"人":{"docs":{},"想":{"docs":{},"在":{"docs":{},"请":{"docs":{},"求":{"docs":{},"执":{"docs":{},"行":{"docs":{},"前":{"docs":{},"检":{"docs":{},"查":{"docs":{},"下":{"docs":{},"角":{"docs":{},"色":{"docs":{},",":{"docs":{},"包":{"docs":{},"装":{"docs":{},"下":{"docs":{},"输":{"docs":{},"入":{"docs":{},"输":{"docs":{},"出":{"docs":{},"流":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"下":{"docs":{},"请":{"docs":{},"求":{"docs":{},"量":{"docs":{},",":{"docs":{},"等":{"docs":{},"等":{"docs":{},",":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"行":{"docs":{},"完":{"docs":{},"成":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"用":{"docs":{},"侵":{"docs":{},"入":{"docs":{},"框":{"docs":{},"架":{"docs":{},"内":{"docs":{},"部":{"docs":{},"。":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"把":{"docs":{},"过":{"docs":{},"程":{"docs":{},"本":{"docs":{},"身":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"对":{"docs":{},"象":{"docs":{},"封":{"docs":{},"装":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"传":{"docs":{},"给":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"器":{"docs":{},"链":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"主":{"docs":{},"过":{"docs":{},"程":{"docs":{},"为":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"某":{"docs":{},"个":{"docs":{},"值":{"docs":{},",":{"docs":{},"或":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}},"属":{"docs":{},"性":{"docs":{},"值":{"docs":{},",":{"docs":{},"或":{"docs":{},"查":{"docs":{},"询":{"docs":{},"一":{"docs":{},"条":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"记":{"docs":{},"录":{"docs":{},"。":{"docs":{},"命":{"docs":{},"令":{"docs":{},"是":{"docs":{},"指":{"docs":{},"有":{"docs":{},"副":{"docs":{},"作":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"条":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"记":{"docs":{},"录":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"即":{"docs":{},"做":{"docs":{},"了":{"docs":{},"修":{"docs":{},"改":{"docs":{},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"又":{"docs":{},"做":{"docs":{},"了":{"docs":{},"查":{"docs":{},"询":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"可":{"docs":{},"能":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"拆":{"docs":{},"成":{"docs":{},"写":{"docs":{},"读":{"docs":{},"分":{"docs":{},"离":{"docs":{},"的":{"docs":{},"两":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"结":{"docs":{},"果":{"docs":{},"都":{"docs":{},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}},"比":{"docs":{},"如":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}},"上":{"docs":{},"面":{"docs":{},"说":{"docs":{},"的":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},",":{"docs":{},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},"它":{"docs":{},"的":{"docs":{},"协":{"docs":{},"议":{"docs":{},"是":{"docs":{},"可":{"docs":{},"以":{"docs":{},"替":{"docs":{},"换":{"docs":{},"的":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"只":{"docs":{},"提":{"docs":{},"供":{"docs":{},"一":{"docs":{},"个":{"docs":{},"总":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"到":{"docs":{},"切":{"docs":{},"换":{"docs":{},"协":{"docs":{},"议":{"docs":{},",":{"docs":{},"但":{"docs":{},"协":{"docs":{},"议":{"docs":{},"支":{"docs":{},"持":{"docs":{},"是":{"docs":{},"可":{"docs":{},"以":{"docs":{},"细":{"docs":{},"分":{"docs":{},"为":{"docs":{},"底":{"docs":{},"层":{"docs":{},"通":{"docs":{},"讯":{"docs":{},",":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},",":{"docs":{},"动":{"docs":{},"态":{"docs":{},"代":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"拆":{"docs":{},"细":{"docs":{},",":{"docs":{},"正":{"docs":{},"交":{"docs":{},"分":{"docs":{},"解":{"docs":{},",":{"docs":{},"会":{"docs":{},"更":{"docs":{},"便":{"docs":{},"于":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"者":{"docs":{},"复":{"docs":{},"用":{"docs":{},"已":{"docs":{},"有":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"而":{"docs":{},"只":{"docs":{},"是":{"docs":{},"替":{"docs":{},"换":{"docs":{},"某":{"docs":{},"部":{"docs":{},"分":{"docs":{},"实":{"docs":{},"现":{"docs":{},"策":{"docs":{},"略":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},"这":{"docs":{},"个":{"docs":{},"分":{"docs":{},"解":{"docs":{},"的":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"需":{"docs":{},"要":{"docs":{},"把":{"docs":{},"握":{"docs":{},"好":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"o":{"docs":{},"k":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},":":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}},"远":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"框":{"docs":{},"架":{"docs":{},",":{"docs":{},"肯":{"docs":{},"定":{"docs":{},"少":{"docs":{},"不":{"docs":{},"了":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"功":{"docs":{},"能":{"docs":{},"很":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"把":{"docs":{},"流":{"docs":{},"转":{"docs":{},"成":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"对":{"docs":{},"象":{"docs":{},"转":{"docs":{},"成":{"docs":{},"流":{"docs":{},"。":{"docs":{},"但":{"docs":{},"因":{"docs":{},"有":{"docs":{},"些":{"docs":{},"地":{"docs":{},"方":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"基":{"docs":{},"类":{"docs":{},"模":{"docs":{},"板":{"docs":{},"方":{"docs":{},"法":{"docs":{},")":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"就":{"docs":{},"不":{"docs":{},"用":{"docs":{},"配":{"docs":{},"了":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"想":{"docs":{},"换":{"docs":{},"个":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"就":{"docs":{},"配":{"docs":{},"置":{"docs":{},"下":{"docs":{},"。":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"与":{"docs":{},"接":{"docs":{},"口":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"文":{"docs":{},"本":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"容":{"docs":{},"为":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"名":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"类":{"docs":{},"名":{"docs":{},"用":{"docs":{},"换":{"docs":{},"行":{"docs":{},"符":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"服":{"docs":{},"务":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"来":{"docs":{},"保":{"docs":{},"存":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"和":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"集":{"docs":{},"群":{"docs":{},"不":{"docs":{},"同":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"也":{"docs":{},"通":{"docs":{},"过":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"来":{"docs":{},"之":{"docs":{},"间":{"docs":{},"同":{"docs":{},"步":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"以":{"docs":{},"感":{"docs":{},"知":{"docs":{},"其":{"docs":{},"它":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"上":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"。":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"会":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"保":{"docs":{},"证":{"docs":{},"一":{"docs":{},"份":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"和":{"docs":{},"消":{"docs":{},"费":{"docs":{},"者":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"不":{"docs":{},"可":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"独":{"docs":{},"立":{"docs":{},"对":{"docs":{},"外":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"转":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"拿":{"docs":{},"不":{"docs":{},"到":{"docs":{},"其":{"docs":{},"它":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"当":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"时":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"会":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"写":{"docs":{},"回":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},",":{"docs":{},"并":{"docs":{},"拿":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"中":{"docs":{},"新":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},"的":{"docs":{},"就":{"docs":{},"继":{"docs":{},"承":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}},"等":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"过":{"docs":{},"程":{"docs":{},"要":{"docs":{},"有":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"接":{"docs":{},"口":{"docs":{},";":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"要":{"docs":{},"写":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}},";":{"docs":{},"同":{"docs":{},"理":{"docs":{},",":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}},"期":{"docs":{},",":{"docs":{},"删":{"docs":{},"除":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"一":{"docs":{},"遍":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{},"变":{"docs":{},"更":{"docs":{},"发":{"docs":{},"送":{"docs":{},"事":{"docs":{},"件":{"docs":{},"并":{"docs":{},"留":{"docs":{},"出":{"docs":{},"监":{"docs":{},"听":{"docs":{},"接":{"docs":{},"口":{"docs":{"principals/general-knowledge.html":{"ref":"principals/general-knowledge.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}}}}},"试":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}},"延":{"docs":{},"迟":{"docs":{},"策":{"docs":{},"略":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"连":{"docs":{},"时":{"docs":{},"随":{"docs":{},"机":{"docs":{},"延":{"docs":{},"时":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}},"交":{"docs":{},"互":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"原":{"docs":{},"来":{"docs":{},"同":{"docs":{},"步":{"docs":{},"消":{"docs":{},"息":{"docs":{},"发":{"docs":{},"送":{"docs":{},"是":{"docs":{},"会":{"docs":{},"话":{"docs":{},"消":{"docs":{},"息":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"场":{"docs":{},"景":{"docs":{},"都":{"docs":{},"传":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"付":{"docs":{},"出":{"docs":{},"了":{"docs":{},"代":{"docs":{},"价":{"docs":{},"。":{"docs":{},"而":{"docs":{},"如":{"docs":{},"果":{"docs":{},"采":{"docs":{},"用":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"非":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}},"出":{"docs":{},"来":{"docs":{},"的":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"不":{"docs":{},"自":{"docs":{},"觉":{"docs":{},"选":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"把":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"接":{"docs":{},"口":{"docs":{},"改":{"docs":{},"成":{"docs":{},"了":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}}}}}}}}}}}}}}}}}}}}},"问":{"docs":{},"题":{"docs":{},"时":{"docs":{},"的":{"docs":{},"现":{"docs":{},"场":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"即":{"docs":{},"排":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"要":{"docs":{},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"如":{"docs":{},"服":{"docs":{},"务":{"docs":{},"调":{"docs":{},"用":{"docs":{},"失":{"docs":{},"败":{"docs":{},"时":{"docs":{},",":{"docs":{},"要":{"docs":{},"给":{"docs":{},"出":{"docs":{},"使":{"docs":{},"用":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"错":{"docs":{},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"环":{"docs":{},"境":{"docs":{},",":{"docs":{},"都":{"docs":{},"先":{"docs":{},"将":{"docs":{},"流":{"docs":{},"转":{"docs":{},"成":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}}},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"连":{"docs":{},"接":{"docs":{},"数":{"docs":{},",":{"docs":{},"超":{"docs":{},"时":{"docs":{},"等":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}},"谈":{"docs":{},"谈":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":5.010869565217392}}}}}}}}}}}}}}},"需":{"docs":{},"求":{"docs":{},",":{"docs":{},"把":{"docs":{},"原":{"docs":{},"来":{"docs":{},"非":{"docs":{"principals/expansibility.html":{"ref":"principals/expansibility.html","tf":0.010869565217391304}}}}}}}},"要":{"docs":{},"伙":{"docs":{},"伴":{"docs":{},"检":{"docs":{},"查":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}},"世":{"docs":{},"界":{"docs":{},"里":{"docs":{},",":{"docs":{},"比":{"docs":{},"较":{"docs":{},"常":{"docs":{},"规":{"docs":{},"的":{"docs":{},"做":{"docs":{},"法":{"docs":{},",":{"docs":{},"是":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"约":{"docs":{},"定":{"docs":{},"在":{"docs":{},"每":{"docs":{},"个":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"约":{"docs":{},"定":{"docs":{},":":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"存":{"docs":{},"在":{"docs":{},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"误":{"docs":{},"加":{"docs":{},"载":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"在":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"根":{"docs":{},"据":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"服":{"docs":{},"务":{"docs":{},"接":{"docs":{},"口":{"docs":{},"描":{"docs":{},"述":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"版":{"docs":{},"本":{"docs":{},"等":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"了":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"与":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}},"功":{"docs":{},"能":{"docs":{},"可":{"docs":{},"以":{"docs":{},"高":{"docs":{},"版":{"docs":{},"本":{"docs":{},"中":{"docs":{},"快":{"docs":{},"速":{"docs":{},"响":{"docs":{},"应":{"docs":{},",":{"docs":{},"并":{"docs":{},"让":{"docs":{},"应":{"docs":{},"用":{"docs":{},"能":{"docs":{},"试":{"docs":{},"用":{"docs":{},"新":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},":":{"docs":{},"高":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}},"旧":{"docs":{},"版":{"docs":{},"本":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"负":{"docs":{},"载":{"docs":{},"均":{"docs":{},"衡":{"docs":{},"策":{"docs":{},"略":{"docs":{},"等":{"docs":{},"都":{"docs":{},"只":{"docs":{},"能":{"docs":{},"在":{"docs":{},"服":{"docs":{},"务":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"但":{"docs":{},"实":{"docs":{},"际":{"docs":{},"使":{"docs":{},"用":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"比":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"更":{"docs":{},"清":{"docs":{},"楚":{"docs":{},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"些":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"是":{"docs":{},"在":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"才":{"docs":{},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"。":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"就":{"docs":{},"加":{"docs":{},"入":{"docs":{},"了":{"docs":{},"在":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"也":{"docs":{},"能":{"docs":{},"配":{"docs":{},"这":{"docs":{},"些":{"docs":{},"参":{"docs":{},"数":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"传":{"docs":{},"递":{"docs":{},"到":{"docs":{},"消":{"docs":{},"费":{"docs":{},"方":{"docs":{},",":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"约":{"docs":{},"定":{"docs":{},"在":{"docs":{},"每":{"docs":{},"个":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"都":{"docs":{},"是":{"docs":{},"先":{"docs":{},"配":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"者":{"docs":{},",":{"docs":{},"往":{"docs":{},"往":{"docs":{},"都":{"docs":{},"只":{"docs":{},"是":{"docs":{},"关":{"docs":{},"心":{"docs":{},"一":{"docs":{},"件":{"docs":{},"事":{"docs":{},",":{"docs":{},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},",":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"完":{"docs":{},"全":{"docs":{},"分":{"docs":{},"离":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},":":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"要":{"docs":{},"有":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"次":{"docs":{},"应":{"docs":{},"用":{"docs":{},"一":{"docs":{},"出":{"docs":{},"错":{"docs":{},",":{"docs":{},"应":{"docs":{},"用":{"docs":{},"的":{"docs":{},"开":{"docs":{},"发":{"docs":{},"或":{"docs":{},"测":{"docs":{},"试":{"docs":{},"就":{"docs":{},"会":{"docs":{},"把":{"docs":{},"出":{"docs":{},"错":{"docs":{},"信":{"docs":{},"息":{"docs":{},"发":{"docs":{},"过":{"docs":{},"来":{"docs":{},",":{"docs":{},"询":{"docs":{},"问":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"这":{"docs":{},"时":{"docs":{},"候":{"docs":{},"我":{"docs":{},"都":{"docs":{},"会":{"docs":{},"问":{"docs":{},"一":{"docs":{},"大":{"docs":{},"堆":{"docs":{},"套":{"docs":{},"话":{"docs":{},",":{"docs":{},"用":{"docs":{},"的":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"呀":{"docs":{},"?":{"docs":{},"是":{"docs":{},"生":{"docs":{},"产":{"docs":{},"环":{"docs":{},"境":{"docs":{},"还":{"docs":{},"是":{"docs":{},"开":{"docs":{},"发":{"docs":{},"测":{"docs":{},"试":{"docs":{},"环":{"docs":{},"境":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"注":{"docs":{},"册":{"docs":{},"中":{"docs":{},"心":{"docs":{},"呀":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},"中":{"docs":{},"的":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"台":{"docs":{},"机":{"docs":{},"器":{"docs":{},"呀":{"docs":{},"?":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"线":{"docs":{},"上":{"docs":{},"环":{"docs":{},"境":{"docs":{},"一":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"大":{"docs":{},"家":{"docs":{},"就":{"docs":{},"慌":{"docs":{},"了":{"docs":{},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"最":{"docs":{},"直":{"docs":{},"接":{"docs":{},"的":{"docs":{},"办":{"docs":{},"法":{"docs":{},"回":{"docs":{},"滚":{"docs":{},"重":{"docs":{},"启":{"docs":{},",":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"故":{"docs":{},"障":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"现":{"docs":{},"场":{"docs":{},"就":{"docs":{},"被":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"了":{"docs":{},",":{"docs":{},"要":{"docs":{},"想":{"docs":{},"事":{"docs":{},"后":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"就":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},"了":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"问":{"docs":{},"题":{"docs":{},"必":{"docs":{},"须":{"docs":{},"在":{"docs":{},"线":{"docs":{},"上":{"docs":{},"的":{"docs":{},"大":{"docs":{},"压":{"docs":{},"力":{"docs":{},"下":{"docs":{},"才":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},",":{"docs":{},"线":{"docs":{},"下":{"docs":{},"测":{"docs":{},"试":{"docs":{},"环":{"docs":{},"境":{"docs":{},"很":{"docs":{},"难":{"docs":{},"重":{"docs":{},"现":{"docs":{},",":{"docs":{},"不":{"docs":{},"太":{"docs":{},"可":{"docs":{},"能":{"docs":{},"让":{"docs":{},"开":{"docs":{},"发":{"docs":{},"或":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"现":{"docs":{},"在":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"是":{"docs":{},"完":{"docs":{},"全":{"docs":{},"无":{"docs":{},"侵":{"docs":{},"入":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"只":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"于":{"docs":{},"配":{"docs":{},"置":{"docs":{},"契":{"docs":{},"约":{"docs":{},"。":{"docs":{},"经":{"docs":{},"过":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"发":{"docs":{},"展":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"满":{"docs":{},"足":{"docs":{},"各":{"docs":{},"种":{"docs":{},"需":{"docs":{},"求":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"多":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"持":{"docs":{},"兼":{"docs":{},"容":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"只":{"docs":{},"增":{"docs":{},"不":{"docs":{},"减":{"docs":{},",":{"docs":{},"里":{"docs":{},"面":{"docs":{},"潜":{"docs":{},"伏":{"docs":{},"着":{"docs":{},"各":{"docs":{},"种":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"规":{"docs":{},"则":{"docs":{},"。":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"也":{"docs":{},"将":{"docs":{},"配":{"docs":{},"置":{"docs":{},"做":{"docs":{},"了":{"docs":{},"一":{"docs":{},"次":{"docs":{},"调":{"docs":{},"整":{"docs":{},",":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"了":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"很":{"docs":{},"多":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"都":{"docs":{},"是":{"docs":{},"放":{"docs":{},"在":{"docs":{},"基":{"docs":{},"类":{"docs":{},"中":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"通":{"docs":{},"过":{"docs":{},"模":{"docs":{},"板":{"docs":{},"方":{"docs":{},"法":{"docs":{},"回":{"docs":{},"调":{"docs":{},"子":{"docs":{},"类":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},",":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}},"功":{"docs":{},"能":{"docs":{},"都":{"docs":{},"当":{"docs":{},"成":{"docs":{},"了":{"docs":{},"核":{"docs":{},"心":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"包":{"docs":{},"含":{"docs":{},"了":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}},"选":{"docs":{},"的":{"docs":{},"是":{"docs":{},"第":{"docs":{},"二":{"docs":{},"种":{"docs":{},"。":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"还":{"docs":{},"有":{"docs":{},",":{"docs":{},"超":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"重":{"docs":{},"试":{"docs":{},"时":{"docs":{},"间":{"docs":{},",":{"docs":{},"定":{"docs":{},"时":{"docs":{},"器":{"docs":{},"间":{"docs":{},"隔":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{},"秒":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{},"毫":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"c":{"3":{"docs":{},"p":{"0":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"项":{"docs":{},"就":{"docs":{},"是":{"docs":{},"这":{"docs":{},"样":{"docs":{},")":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"人":{"docs":{},"员":{"docs":{},"会":{"docs":{},"疯":{"docs":{},"掉":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"项":{"docs":{},",":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}},"隔":{"docs":{},"离":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"找":{"docs":{},"不":{"docs":{},"到":{"docs":{},"配":{"docs":{},"置":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},",":{"docs":{},"当":{"docs":{},"用":{"docs":{},"户":{"docs":{},"希":{"docs":{},"望":{"docs":{},"将":{"docs":{},"配":{"docs":{},"置":{"docs":{},"放":{"docs":{},"到":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"时":{"docs":{},",":{"docs":{},"不":{"docs":{},"太":{"docs":{},"方":{"docs":{},"便":{"docs":{},"。":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"驱":{"docs":{},"动":{"docs":{},"等":{"docs":{},",":{"docs":{},"都":{"docs":{},"是":{"docs":{},"采":{"docs":{},"用":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"principals/configuration.html":{"ref":"principals/configuration.html","tf":0.005649717514124294}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"严":{"docs":{},"格":{"docs":{},"约":{"docs":{},"定":{"docs":{},"w":{"docs":{},"a":{"docs":{},"r":{"docs":{},"n":{"docs":{},"、":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"级":{"docs":{},"别":{"docs":{},"记":{"docs":{},"录":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},"哪":{"docs":{},"些":{"docs":{},"是":{"docs":{},"关":{"docs":{},"键":{"docs":{},"信":{"docs":{},"息":{"docs":{},"呢":{"docs":{},"?":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"字":{"docs":{},"串":{"docs":{},"就":{"docs":{},"报":{"docs":{},"警":{"docs":{},",":{"docs":{},"又":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"减":{"docs":{},"少":{"docs":{},"了":{"docs":{},"发":{"docs":{},"生":{"docs":{},"。":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"报":{"docs":{},"警":{"docs":{},"会":{"docs":{},"让":{"docs":{},"人":{"docs":{},"疲":{"docs":{},"倦":{"docs":{},",":{"docs":{},"使":{"docs":{},"人":{"docs":{},"对":{"docs":{},"报":{"docs":{},"警":{"docs":{},"失":{"docs":{},"去":{"docs":{},"警":{"docs":{},"惕":{"docs":{},"性":{"docs":{},",":{"docs":{},"使":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"恢":{"docs":{},"复":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}},"有":{"docs":{},"了":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"约":{"docs":{},"定":{"docs":{},",":{"docs":{},"监":{"docs":{},"管":{"docs":{},"系":{"docs":{},"统":{"docs":{},"发":{"docs":{},"现":{"docs":{},"日":{"docs":{},"志":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"中":{"docs":{},"出":{"docs":{},"现":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"配":{"docs":{},"置":{"docs":{},"了":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}},"界":{"docs":{},"限":{"docs":{},"设":{"docs":{},"置":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}},"端":{"docs":{},"用":{"docs":{},"于":{"docs":{},"处":{"docs":{},"理":{"docs":{},"请":{"docs":{},"求":{"docs":{},"的":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}},"便":{"docs":{},"可":{"docs":{},"反":{"docs":{},"向":{"docs":{},"调":{"docs":{},"用":{"docs":{},"到":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}},"暴":{"docs":{},"露":{"docs":{},"一":{"docs":{},"个":{"docs":{},"服":{"docs":{},"务":{"docs":{},"(":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"法":{"docs":{},"参":{"docs":{},"数":{"docs":{},"上":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"a":{"docs":{},")":{"docs":{},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"例":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"级":{"docs":{},"别":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"以":{"docs":{},"评":{"docs":{},"估":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"“":{"docs":{},"亚":{"docs":{},"健":{"docs":{},"康":{"docs":{},"”":{"docs":{},"程":{"docs":{},"度":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}},"虽":{"docs":{},"然":{"docs":{},"有":{"docs":{},"点":{"docs":{},"麻":{"docs":{},"烦":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"保":{"docs":{},"证":{"docs":{},"日":{"docs":{},"志":{"docs":{},"信":{"docs":{},"息":{"docs":{},"浓":{"docs":{},"度":{"docs":{},",":{"docs":{},"让":{"docs":{},"监":{"docs":{},"控":{"docs":{},"更":{"docs":{},"有":{"docs":{},"效":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},"的":{"docs":{},",":{"docs":{},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"、":{"docs":{},"i":{"docs":{},"o":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}},"调":{"docs":{},"度":{"docs":{},"器":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"达":{"docs":{},"到":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"时":{"docs":{},",":{"docs":{},"说":{"docs":{},"明":{"docs":{},"已":{"docs":{},"经":{"docs":{},"达":{"docs":{},"到":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"方":{"docs":{},"的":{"docs":{},"负":{"docs":{},"荷":{"docs":{},"上":{"docs":{},"限":{"docs":{},",":{"docs":{},"要":{"docs":{},"在":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"中":{"docs":{},"日":{"docs":{},"志":{"docs":{},"记":{"docs":{},"录":{"docs":{},"这":{"docs":{},"个":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"以":{"docs":{},"发":{"docs":{},"出":{"docs":{},"监":{"docs":{},"控":{"docs":{},"警":{"docs":{},"报":{"docs":{},"。":{"docs":{},"记":{"docs":{},"得":{"docs":{},"注":{"docs":{},"意":{"docs":{},"不":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"多":{"docs":{},"次":{"docs":{},"记":{"docs":{},"录":{"docs":{},"哦":{"docs":{},"。":{"docs":{},"(":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"的":{"docs":{},"饱":{"docs":{},"和":{"docs":{},"策":{"docs":{},"略":{"docs":{},"不":{"docs":{},"会":{"docs":{},"有":{"docs":{},"这":{"docs":{},"些":{"docs":{},"附":{"docs":{},"加":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},")":{"docs":{},"根":{"docs":{},"据":{"docs":{},"警":{"docs":{},"报":{"docs":{},"的":{"docs":{},"频":{"docs":{},"率":{"docs":{},",":{"docs":{},"已":{"docs":{},"经":{"docs":{},"决":{"docs":{},"定":{"docs":{},"扩":{"docs":{},"容":{"docs":{},"调":{"docs":{},"整":{"docs":{},"等":{"docs":{},"等":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"系":{"docs":{},"统":{"docs":{},"问":{"docs":{},"题":{"docs":{},"被":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"高":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.07954545454545454}},"可":{"docs":{},"用":{"docs":{},"组":{"docs":{},"件":{"docs":{},"要":{"docs":{},"容":{"docs":{},"忍":{"docs":{},"其":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"组":{"docs":{},"件":{"docs":{},"的":{"docs":{},"失":{"docs":{},"败":{"docs":{},"。":{"docs":{"principals/robustness.html":{"ref":"principals/robustness.html","tf":0.010309278350515464}}}}}}}}}}}}}}}}}}},"!":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0035587188612099642}},"=":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.005338078291814947}}}},"&":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},";":{"docs":{},"&":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0071174377224199285}}}}}}}}}}},"g":{"docs":{},"t":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0071174377224199285}}}}}},"'":{"docs":{},"/":{"docs":{},"'":{"docs":{},")":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}},"{":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821},"principals/extension.html":{"ref":"principals/extension.html","tf":0.008298755186721992},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"?":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"[":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.019572953736654804}}},"]":{"docs":{},"*":{"docs":{},")":{"docs":{},"\\":{"docs":{},"\\":{"docs":{},".":{"docs":{},"j":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}},";":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.019572953736654804}}}},"z":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"到":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}},"忽":{"docs":{},"略":{"docs":{},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"版":{"docs":{},"本":{"docs":{},"号":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}},"段":{"docs":{},"判":{"docs":{},"断":{"docs":{},"是":{"docs":{},"不":{"docs":{},"是":{"docs":{},"跨":{"docs":{},"机":{"docs":{},"房":{"docs":{},"。":{"docs":{},"另":{"docs":{},"外":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"是":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.011363636363636364}},"一":{"docs":{},"下":{"docs":{},"网":{"docs":{},"络":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"跨":{"docs":{},"机":{"docs":{},"房":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"是":{"docs":{},"防":{"docs":{},"火":{"docs":{},"墙":{"docs":{},"阻":{"docs":{},"挡":{"docs":{},",":{"docs":{},"请":{"docs":{},"联":{"docs":{},"系":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"了":{"docs":{},"都":{"docs":{},"快":{"docs":{},"疯":{"docs":{},"掉":{"docs":{},",":{"docs":{},"因":{"docs":{},"是":{"docs":{},"线":{"docs":{},"上":{"docs":{},"环":{"docs":{},"境":{"docs":{},"不":{"docs":{},"好":{"docs":{},"调":{"docs":{},"试":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"有":{"docs":{},"些":{"docs":{},"场":{"docs":{},"景":{"docs":{},"不":{"docs":{},"是":{"docs":{},"每":{"docs":{},"次":{"docs":{},"都":{"docs":{},"能":{"docs":{},"重":{"docs":{},"现":{"docs":{},"。":{"docs":{},"异":{"docs":{},"常":{"docs":{},"最":{"docs":{},"基":{"docs":{},"本":{"docs":{},"要":{"docs":{},"带":{"docs":{},"有":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"操":{"docs":{},"作":{"docs":{},"者":{"docs":{},",":{"docs":{},"操":{"docs":{},"作":{"docs":{},"目":{"docs":{},"标":{"docs":{},",":{"docs":{},"原":{"docs":{},"因":{"docs":{},"等":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"应":{"docs":{},"给":{"docs":{},"出":{"docs":{},"解":{"docs":{},"决":{"docs":{},"方":{"docs":{},"案":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"上":{"docs":{},"面":{"docs":{},"可":{"docs":{},"以":{"docs":{},"给":{"docs":{},"出":{"docs":{},":":{"docs":{},"\"":{"docs":{},"从":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"累":{"docs":{},"啊":{"docs":{},",":{"docs":{},"最":{"docs":{},"主":{"docs":{},"要":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"有":{"docs":{},"些":{"docs":{},"开":{"docs":{},"发":{"docs":{},"或":{"docs":{},"测":{"docs":{},"试":{"docs":{},"人":{"docs":{},"员":{"docs":{},"根":{"docs":{},"本":{"docs":{},"分":{"docs":{},"不":{"docs":{},"清":{"docs":{},",":{"docs":{},"没":{"docs":{},"办":{"docs":{},"法":{"docs":{},",":{"docs":{},"只":{"docs":{},"好":{"docs":{},"提":{"docs":{},"供":{"docs":{},"上":{"docs":{},"门":{"docs":{},"服":{"docs":{},"务":{"docs":{},",":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"可":{"docs":{},"不":{"docs":{},"是":{"docs":{},"浮":{"docs":{},"云":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"最":{"docs":{},"好":{"docs":{},"把":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"环":{"docs":{},"境":{"docs":{},"信":{"docs":{},"息":{"docs":{},"一":{"docs":{},"并":{"docs":{},"打":{"docs":{},"进":{"docs":{},"去":{"docs":{},",":{"docs":{},"最":{"docs":{},"好":{"docs":{},"给":{"docs":{},"日":{"docs":{},"志":{"docs":{},"输":{"docs":{},"出":{"docs":{},"做":{"docs":{},"个":{"docs":{},"包":{"docs":{},"装":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"处":{"docs":{},"理":{"docs":{},"掉":{"docs":{},",":{"docs":{},"免":{"docs":{},"得":{"docs":{},"忘":{"docs":{},"了":{"docs":{},"。":{"docs":{},"包":{"docs":{},"装":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},"接":{"docs":{},"口":{"docs":{},"如":{"docs":{},":":{"docs":{"principals/dummy.html":{"ref":"principals/dummy.html","tf":0.0017793594306049821}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"只":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"在":{"docs":{},"客":{"docs":{},"户":{"docs":{},"端":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"在":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},",":{"docs":{},"却":{"docs":{},"采":{"docs":{},"用":{"docs":{},"了":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"模":{"docs":{},"型":{"docs":{},"类":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"些":{"docs":{},"都":{"docs":{},"是":{"docs":{},"核":{"docs":{},"心":{"docs":{},"吗":{"docs":{},"?":{"docs":{},"踢":{"docs":{},"掉":{"docs":{},"哪":{"docs":{},"些":{"docs":{},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"写":{"docs":{},"死":{"docs":{},"了":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}},"原":{"docs":{},"则":{"docs":{},"的":{"docs":{},"思":{"docs":{},"路":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}},"因":{"docs":{},"参":{"docs":{},"见":{"docs":{},":":{"docs":{},"谈":{"docs":{},"谈":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"与":{"docs":{},"增":{"docs":{},"量":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"才":{"docs":{},"是":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}},"拆":{"docs":{},"分":{"docs":{},"后":{"docs":{},",":{"docs":{},"设":{"docs":{},"计":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}},"既":{"docs":{},"然":{"docs":{},"要":{"docs":{},"开":{"docs":{},"放":{"docs":{},",":{"docs":{},"那":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}},"核":{"docs":{},"心":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"设":{"docs":{},"计":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}},"泛":{"docs":{},"化":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"指":{"docs":{},":":{"docs":{},"将":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"逐":{"docs":{},"渐":{"docs":{},"抽":{"docs":{},"象":{"docs":{},",":{"docs":{},"取":{"docs":{},"所":{"docs":{},"有":{"docs":{},"功":{"docs":{},"能":{"docs":{},"并":{"docs":{},"集":{"docs":{},",":{"docs":{},"新":{"docs":{},"加":{"docs":{},"功":{"docs":{},"能":{"docs":{},"总":{"docs":{},"是":{"docs":{},"套":{"docs":{},"入":{"docs":{},"并":{"docs":{},"扩":{"docs":{},"充":{"docs":{},"旧":{"docs":{},"功":{"docs":{},"能":{"docs":{},"的":{"docs":{},"概":{"docs":{},"念":{"docs":{},"。":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"步":{"docs":{},",":{"docs":{},"微":{"docs":{},"核":{"docs":{},"心":{"docs":{},",":{"docs":{},"插":{"docs":{},"件":{"docs":{},"式":{"docs":{},",":{"docs":{},"平":{"docs":{},"等":{"docs":{},"对":{"docs":{},"待":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}},"三":{"docs":{},"步":{"docs":{},",":{"docs":{},"全":{"docs":{},"管":{"docs":{},"道":{"docs":{},"式":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"框":{"docs":{},"架":{"docs":{},"自":{"docs":{},"身":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"均":{"docs":{},"使":{"docs":{},"用":{"docs":{},"截":{"docs":{},"面":{"docs":{},"拦":{"docs":{},"截":{"docs":{},"实":{"docs":{},"现":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"步":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"只":{"docs":{},"封":{"docs":{},"装":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"化":{"docs":{},"因":{"docs":{},"子":{"docs":{},",":{"docs":{},"最":{"docs":{},"大":{"docs":{},"化":{"docs":{},"复":{"docs":{},"用":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}},"五":{"docs":{},"步":{"docs":{},",":{"docs":{},"分":{"docs":{},"层":{"docs":{},",":{"docs":{},"组":{"docs":{},"合":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"式":{"docs":{},"扩":{"docs":{},"展":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}},"六":{"docs":{},"步":{"docs":{},",":{"docs":{},"整":{"docs":{},"理":{"docs":{},",":{"docs":{},"梳":{"docs":{},"理":{"docs":{},"关":{"docs":{},"系":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}},"四":{"docs":{},"步":{"docs":{},",":{"docs":{},"最":{"docs":{},"少":{"docs":{},"概":{"docs":{},"念":{"docs":{},",":{"docs":{},"一":{"docs":{},"致":{"docs":{},"性":{"docs":{},"概":{"docs":{},"念":{"docs":{},"模":{"docs":{},"型":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"不":{"docs":{},"同":{"docs":{},"阶":{"docs":{},"段":{"docs":{},",":{"docs":{},"完":{"docs":{},"全":{"docs":{},"可":{"docs":{},"以":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"掉":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"为":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}},"随":{"docs":{},"着":{"docs":{},"服":{"docs":{},"务":{"docs":{},"化":{"docs":{},"的":{"docs":{},"推":{"docs":{},"广":{"docs":{},",":{"docs":{},"网":{"docs":{},"站":{"docs":{},"对":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{},"服":{"docs":{},"务":{"docs":{},"框":{"docs":{},"架":{"docs":{},"的":{"docs":{},"需":{"docs":{},"求":{"docs":{},"逐":{"docs":{},"渐":{"docs":{},"增":{"docs":{},"多":{"docs":{},",":{"docs":{},"d":{"docs":{},"u":{"docs":{},"b":{"docs":{},"b":{"docs":{},"o":{"docs":{"principals/extension.html":{"ref":"principals/extension.html","tf":0.004149377593360996}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},"并":{"docs":{},"行":{"docs":{},"开":{"docs":{},"发":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}},"优":{"docs":{},"势":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"先":{"docs":{},"级":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"够":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"后":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}},"成":{"docs":{},"为":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043}}},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.006289308176100629}}}},"拉":{"docs":{},"成":{"docs":{},"分":{"docs":{},"支":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}},"版":{"docs":{},"本":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.028169014084507043}}},"前":{"docs":{},"有":{"docs":{},"试":{"docs":{},"用":{"docs":{},"阶":{"docs":{},"段":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}},"是":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"的":{"docs":{},"!":{"docs":{},"因":{"docs":{},"为":{"docs":{},":":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}},"有":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"管":{"docs":{},"理":{"docs":{"release.html":{"ref":"release.html","tf":5.014084507042254}}}},"(":{"docs":{},"可":{"docs":{},"以":{"docs":{},"跨":{"docs":{},"了":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},")":{"docs":{},"定":{"docs":{},"期":{"docs":{},"升":{"docs":{},"级":{"docs":{},"平":{"docs":{},"摊":{"docs":{},"风":{"docs":{},"险":{"docs":{},"(":{"docs":{},"类":{"docs":{},"似":{"docs":{},"小":{"docs":{},"步":{"docs":{},"快":{"docs":{},"跑":{"docs":{},")":{"docs":{},"。":{"docs":{},"经":{"docs":{},"历":{"docs":{},"过":{"docs":{},"周":{"docs":{},"期":{"docs":{},"长":{"docs":{},"的":{"docs":{},"大":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"同":{"docs":{},"学":{"docs":{},"会":{"docs":{},"有":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"经":{"docs":{},"历":{"docs":{},",":{"docs":{},"三":{"docs":{},"方":{"docs":{},"库":{"docs":{},"版":{"docs":{},"本":{"docs":{},"长":{"docs":{},"时":{"docs":{},"间":{"docs":{},"不":{"docs":{},"升":{"docs":{},"级":{"docs":{},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"出":{"docs":{},"了":{"docs":{},"问":{"docs":{},"题":{"docs":{},"不":{"docs":{},"得":{"docs":{},"不":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{},"新":{"docs":{},"版":{"docs":{},"本":{"docs":{},"(":{"docs":{},"跨":{"docs":{},"了":{"docs":{},"多":{"docs":{},"个":{"docs":{},"版":{"docs":{},"本":{"docs":{},")":{"docs":{},"风":{"docs":{},"险":{"docs":{},"巨":{"docs":{},"大":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"以":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"只":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}},"所":{"docs":{},"以":{"docs":{},"用":{"docs":{},"户":{"docs":{},"需":{"docs":{},"要":{"docs":{},"积":{"docs":{},"极":{"docs":{},"跟":{"docs":{},"进":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"线":{"docs":{},"上":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"只":{"docs":{},"会":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}},":":{"docs":{},"低":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"相":{"docs":{},"对":{"docs":{},"出":{"docs":{},"问":{"docs":{},"题":{"docs":{},"才":{"docs":{},"升":{"docs":{},"级":{"docs":{},"到":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}},"稳":{"docs":{},"定":{"docs":{},"性":{"docs":{},"的":{"docs":{},"提":{"docs":{},"高":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}},"经":{"docs":{},"过":{"docs":{},"一":{"docs":{},"个":{"docs":{},"试":{"docs":{},"用":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"保":{"docs":{},"持":{"docs":{},"稳":{"docs":{},"定":{"docs":{},"。":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}},"让":{"docs":{},"直":{"docs":{},"接":{"docs":{},"升":{"docs":{},"级":{"docs":{},"。":{"docs":{},"(":{"docs":{},"这":{"docs":{},"个":{"docs":{},"称":{"docs":{},"为":{"docs":{},"“":{"docs":{},"夕":{"docs":{},"阳":{"docs":{},"条":{"docs":{},"款":{"docs":{},"”":{"docs":{},")":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}}}}}},"试":{"docs":{},"用":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"。":{"docs":{},"找":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"试":{"docs":{},"用":{"docs":{"release.html":{"ref":"release.html","tf":0.014084507042253521}}}}}}}}}}}}}}}},"《":{"docs":{},"开":{"docs":{},"发":{"docs":{},"指":{"docs":{},"南":{"docs":{},"》":{"docs":{},"翻":{"docs":{},"译":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}},"用":{"docs":{},"户":{"docs":{},"指":{"docs":{},"南":{"docs":{},"》":{"docs":{},"翻":{"docs":{},"译":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}}}},"低":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.045454545454545456}}},"修":{"docs":{},"改":{"docs":{},"后":{"docs":{},"通":{"docs":{},"过":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}},"复":{"docs":{},"代":{"docs":{},"码":{"docs":{},"前":{"docs":{},"先":{"docs":{},"写":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"建":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}},"时":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}},"功":{"docs":{},"能":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788},"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"反":{"docs":{},"馈":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}},"工":{"docs":{},"程":{"docs":{},"。":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"待":{"docs":{},"定":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.22348484848484848}}}},"文":{"docs":{},"档":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.007575757575757576}}}},"未":{"docs":{},"认":{"docs":{},"领":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.10984848484848485}}}}},"朱":{"docs":{},"启":{"docs":{},"恒":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"流":{"docs":{},"程":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"白":{"docs":{},"文":{"docs":{},"志":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"罗":{"docs":{},"立":{"docs":{},"树":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"计":{"docs":{},"划":{"docs":{},"完":{"docs":{},"成":{"docs":{},"时":{"docs":{},"间":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}}}}},"认":{"docs":{},"领":{"docs":{},"者":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}}},"贡":{"docs":{},"献":{"docs":{"contribution.html":{"ref":"contribution.html","tf":5.003787878787879}}}},"闾":{"docs":{},"刚":{"docs":{"contribution.html":{"ref":"contribution.html","tf":0.003787878787878788}}}},"讲":{"docs":{},"一":{"docs":{},"遍":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}},"述":{"docs":{},"一":{"docs":{},"遍":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"checklist.html":{"ref":"checklist.html","tf":0.021739130434782608}}}}}}}}},"#":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}},"事":{"docs":{},"件":{"docs":{},"通":{"docs":{},"知":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"全":{"docs":{},"部":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"共":{"docs":{},"享":{"docs":{},"连":{"docs":{},"接":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}},"则":{"docs":{},"将":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}},"后":{"docs":{},",":{"docs":{},"在":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"可":{"docs":{},"用":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"会":{"docs":{},"继":{"docs":{},"续":{"docs":{},"发":{"docs":{},"送":{"docs":{},"到":{"docs":{},"上":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"提":{"docs":{},"供":{"docs":{},"者":{"docs":{},"。":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{},"i":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"连":{"docs":{},"接":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"闭":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"还":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"如":{"docs":{},"何":{"docs":{},"避":{"docs":{},"免":{"docs":{},"部":{"docs":{},"分":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}},"坏":{"docs":{},"味":{"docs":{},"道":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":5.00314465408805}}}}},"根":{"docs":{},"据":{"docs":{},"@":{"docs":{},"a":{"docs":{},"d":{"docs":{},"a":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"注":{"docs":{},"解":{"docs":{},"上":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},",":{"docs":{},"从":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"获":{"docs":{},"致":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"实":{"docs":{},"际":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"名":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"此":{"docs":{},"项":{"docs":{},"功":{"docs":{},"能":{"docs":{},"自":{"docs":{},"动":{"docs":{},"关":{"docs":{},"闭":{"docs":{},"连":{"docs":{},"接":{"docs":{},"重":{"docs":{},"试":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"开":{"docs":{},"启":{"docs":{},"发":{"docs":{},"送":{"docs":{},"重":{"docs":{},"试":{"docs":{},"功":{"docs":{},"能":{"docs":{},"(":{"docs":{},"即":{"docs":{},"发":{"docs":{},"送":{"docs":{},"数":{"docs":{},"据":{"docs":{},"时":{"docs":{},"如":{"docs":{},"果":{"docs":{},"连":{"docs":{},"接":{"docs":{},"已":{"docs":{},"断":{"docs":{},"开":{"docs":{},",":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"重":{"docs":{},"新":{"docs":{},"建":{"docs":{},"立":{"docs":{},"连":{"docs":{},"接":{"docs":{},")":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"点":{"docs":{},"对":{"docs":{},"点":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"和":{"docs":{},"引":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}},"直":{"docs":{},"连":{"docs":{},"服":{"docs":{},"务":{"docs":{},":":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}},"确":{"docs":{},"定":{"docs":{},"要":{"docs":{},"调":{"docs":{},"用":{"docs":{},"哪":{"docs":{},"个":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}},"策":{"docs":{},"略":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}},"默":{"docs":{},"认":{"docs":{},"开":{"docs":{},"启":{"docs":{},"了":{"docs":{},"连":{"docs":{},"接":{"docs":{},"的":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}},"给":{"docs":{},"定":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"点":{"docs":{},"上":{"docs":{},"调":{"docs":{},"用":{"docs":{},"都":{"docs":{},"有":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}},"逻":{"docs":{},"辑":{"docs":{},"分":{"docs":{},"离":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}},"长":{"docs":{},"连":{"docs":{},"接":{"docs":{},"进":{"docs":{},"行":{"docs":{},"数":{"docs":{},"据":{"docs":{},"传":{"docs":{},"输":{"docs":{},",":{"docs":{},"已":{"docs":{},"达":{"docs":{},"到":{"docs":{},"减":{"docs":{},"少":{"docs":{},"服":{"docs":{},"务":{"docs":{},"端":{"docs":{},"连":{"docs":{},"接":{"docs":{},"数":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},".":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"当":{"docs":{},"有":{"docs":{},"数":{"docs":{},"据":{"docs":{},"请":{"docs":{},"求":{"docs":{},"时":{"docs":{},"在":{"docs":{},"做":{"docs":{},"连":{"docs":{},"接":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"。":{"docs":{"code-smell.html":{"ref":"code-smell.html","tf":0.0031446540880503146}}}}}}}}}}}}}}}}}}}}},"技":{"docs":{},"术":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},"测":{"docs":{},"试":{"docs":{"TCK.html":{"ref":"TCK.html","tf":5.032258064516129}}}}}}}}}},"length":4020},"corpusTokens":["!","!=","\"","\"$deploy_home\"","\"$dump_pids\"","\".\\c\"","\".class\");","\"2.0.0\");","\"dubbo\"))","\"dump","\"hello","\"http://10.20.160.198/wiki/display/dubbo/transport.type\"})","\"key2\"},表示先在","\"ok!\"","\"provider\",","\"script\"))","\"script\")).addparameter(\"type\",","\"the","\"transport\"})","\"xxx\")","\"号分隔","#","$0`","$2}'`","$adp","$dump_dat","$dump_dir","$dump_dir/free.dump","$dump_dir/iostat.dump","$dump_dir/jinfo","$dump_dir/jmap","$dump_dir/jstack","$dump_dir/jstat","$dump_dir/lsof","$dump_dir/mpstat.dump","$dump_dir/netstat.dump","$dump_dir/sar.dump","$dump_dir/uptime.dump","$dump_dir/vmstat.dump","$dump_pid","$dump_root","$host_nam","$java_home/bin/jinfo","$java_home/bin/jmap","$java_home/bin/jstack","$java_home/bin/jstat","$pid","$pid.dump","${dubbo.registry.address}","${home}/.m2/repository,","&amp;&amp;","&gt;","'/')","'{print","()","(activ","(applic","(file","(files.size()","(matcher.find()","(servic","(technolog","(throwabl","(url","(urls.hasmoreelements())","(version","(实现client接口)","(实现cluster接口)","(实现compiler接口)","(实现container接口)","(实现dispatcher接口)","(实现exchangeclient接口)","(实现exchanger接口)","(实现exchangeserver接口)","(实现exporterlistener接口)","(实现exporter接口)","(实现extensionfactory接口)","(实现filter接口)","(实现invokerlistener接口)","(实现invoker接口)","(实现loadbalance接口)","(实现loggeradapter接口)","(实现merger接口)","(实现monitorfactory接口)","(实现monitor接口)","(实现networker接口)","(实现objectinput接口)","(实现objectoutput接口)","(实现pagehandler接口)","(实现protocol接口)","(实现proxyfactory接口)","(实现registryfactory接口)","(实现registry接口)","(实现serialization接口)","(实现server接口)","(实现statuschecker接口)","(实现telnethandler接口)","(实现threadpool接口)","(实现transporter接口)","(实现validation接口)","(称为幽灵连接),","(纯文本文件,内容为:xxx=com.xxx.xxxcachefactory)","(纯文本文件,内容为:xxx=com.xxx.xxxcluster)","(纯文本文件,内容为:xxx=com.xxx.xxxcompiler)","(纯文本文件,内容为:xxx=com.xxx.xxxcontainer)","(纯文本文件,内容为:xxx=com.xxx.xxxdispatcher)","(纯文本文件,内容为:xxx=com.xxx.xxxexchanger)","(纯文本文件,内容为:xxx=com.xxx.xxxexporterlistener)","(纯文本文件,内容为:xxx=com.xxx.xxxextensionfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxfilter)","(纯文本文件,内容为:xxx=com.xxx.xxxinvokerlistener)","(纯文本文件,内容为:xxx=com.xxx.xxxloadbalance)","(纯文本文件,内容为:xxx=com.xxx.xxxloggeradapter)","(纯文本文件,内容为:xxx=com.xxx.xxxmerger)","(纯文本文件,内容为:xxx=com.xxx.xxxmonitorfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxnetworker)","(纯文本文件,内容为:xxx=com.xxx.xxxpagehandler)","(纯文本文件,内容为:xxx=com.xxx.xxxprotocol)","(纯文本文件,内容为:xxx=com.xxx.xxxproxyfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxregistryfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxrouterfactory)","(纯文本文件,内容为:xxx=com.xxx.xxxserialization)","(纯文本文件,内容为:xxx=com.xxx.xxxstatuschecker)","(纯文本文件,内容为:xxx=com.xxx.xxxtelnethandler)","(纯文本文件,内容为:xxx=com.xxx.xxxthreadpool)","(纯文本文件,内容为:xxx=com.xxx.xxxtransporter)","(纯文本文件,内容为:xxx=com.xxx.xxxvalidation)","(造轮者)","*","*/","+","+%y%m%d%h%m%s`","++;","...","...);","......,多好的同学,看到错误的人复制一下就完事了,我们该学学。可以把常见的错误故意犯一遍,看看错误信息能否自我搞定问题,","...\\c\"","/**","//","//...","/bin/netstat","/usr/bin/fre","/usr/bin/iostat","/usr/bin/mpstat","/usr/bin/sar","/usr/bin/uptim","/usr/bin/vmstat","/usr/sbin/lsof","0","0%","0)","02","04","1","1)","1.","1.5","10","10.20.130.20","10.20.130.20:20880","10.20.16.3","100","1000","11","12","127.0.0.1","13","1;","1。","1,serviceconfig","1,放置扩展点配置文件","1:","2","2.","2.2.1","2.4.x","2.4.x。是","2.5.x","2.5.x。加新功能的版本,会给对新功能有需求的应用试用。","2.6.0,作为新功能开发版本。","20%","2012","20880","27","2>&1","2。","2,serviceconfig","2:","3","3.","30","3。","3,referenceconfig","4","4.","4,referenceconfig","5","5.","5.1","5.10","5.11","5.12","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.2","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.3","5.4","5.5","5.6","5.7","5.8","5.9","50","5,而该","6","6.","7","7.","8","8.1","8.2","8.3","8.4","8.5","8.6","8.7","9","90%","9\\\\.\\\\","9][0",":",";","=","==",">",">provid","?","@activ","@activate(\"xxx\")","@activate(group","@adapt","@adaptive({\"client\",","@adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\",","@adaptive({\"server\",","@extens","@help(parameter=\"...\",","@param","@return","@see","@throw","[","]*)\\\\.jar\");","];","abstract","abstractcli","abstractclusterinvoker(directory)","abstractexport","abstractinvok","abstractproxyinvok","abstractserv","abstractxxx。","ac","accesslog,","action","action,dubbo","action,里面有个","activ","adapt","address/com.alibaba.dubbo.registry.registryserevice)","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&export=encode(dubbo://provid","address/com.alibaba.dubbo.registry.registryserevice?registry=dubbo&refer=encode(version=1.0.0))","address/com.xxx.xxxservice?router=script&type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?type=js&rule=encode(function{...}))","address/com.xxx.xxxservice?version=1.0.0\")","address/com.xxx.xxxservice?version=1.0.0)","address/com.xxx.xxxservice?version=1.0.0))","all,","annot","aop","aop,即","api","api,其它各层均为","api,用户通过","applicationcontext,dubbo","appop","arg","arg1,","arg2);","args)","args),后来,有了无接口调用的需求,就是没有接口方法也能调用,并将","args),导致不管是不是无接口调用,都得把","attach","avro","b","bean","beanfactory,maven","bean,strut","befor","bind()","bind(url","boolean","bu","bug","bugfix","bugfix,升级第三位版本号。","bugfix,推广使用此版本。如何可行,可以推进应用在期望的时间点内升级到","bug,不小心改到了这里,直接引爆故障。对于这个例子,一个原则就是永远不要区分","bug,或修改框架本身,可以从","bug,比如:获取程序的版本号,会通过扫描","build","byte[]","c","c:\\document","cach","cache(url","cachefactori","cacti","callback","car","carmak","carmaker、wheelmak","carmaker(造车者)、wheelmak","catch","catch),而如果它抛出异常会导致主流程异常,这是我们不希望看到的。但这里要控制个度,不要随意","catch,更不要无声无息的吃掉异常。","cdi","cglib","chain,","chain.invoke(inv);","chang","channel","channel,","channelhandl","check","check()","checkduplicate(class","checkduplicate(cls.getname().replace('.',","checkduplicate(str","checklist","class","class),就优先将它设计成不变类。不变类有天然的并发共享优势,减少同步或复制,而且可以有效帮忙分析线程安全的范围。就算是可变类,对于从构造函数传入的引用,在类中持有时,最好将字段","class[]","classload","classpath","clean","client","client,","clone","cls)","cls,","cls.getpackage().getimplementationversion();","cls.getpackage().getspecificationversion();","cls.getprotectiondomain().getcodesource().getlocation().getfile();","cluster","cluster,","coc","code","code(正常流程/异常流程)","codec","collect","com","com.alibaba.dubbo.cache.cache;","com.alibaba.dubbo.cache.cachefactori","com.alibaba.dubbo.cache.cachefactory;","com.alibaba.dubbo.cache.support.jcache.jcachefactori","com.alibaba.dubbo.cache.support.lru.lrucachefactori","com.alibaba.dubbo.cache.support.threadlocal.threadlocalcachefactori","com.alibaba.dubbo.common.compiler.compil","com.alibaba.dubbo.common.compiler.compiler;","com.alibaba.dubbo.common.compiler.support.javassistcompil","com.alibaba.dubbo.common.compiler.support.jdkcompil","com.alibaba.dubbo.common.extension.activate;","com.alibaba.dubbo.common.extension.extensionfactori","com.alibaba.dubbo.common.extension.extensionfactory;","com.alibaba.dubbo.common.extension.factory.spiextensionfactori","com.alibaba.dubbo.common.logger.jcl.jclloggeradapt","com.alibaba.dubbo.common.logger.jdk.jdkloggeradapt","com.alibaba.dubbo.common.logger.log4j.log4jloggeradapt","com.alibaba.dubbo.common.logger.logger;","com.alibaba.dubbo.common.logger.loggeradapt","com.alibaba.dubbo.common.logger.loggeradapter;","com.alibaba.dubbo.common.logger.slf4j.slf4jloggeradapt","com.alibaba.dubbo.common.serialize.dubbo.dubboseri","com.alibaba.dubbo.common.serialize.hessian.hessian2seri","com.alibaba.dubbo.common.serialize.java.compactedjavaseri","com.alibaba.dubbo.common.serialize.java.javaseri","com.alibaba.dubbo.common.serialize.objectinput","com.alibaba.dubbo.common.serialize.objectinput;","com.alibaba.dubbo.common.serialize.objectoutput","com.alibaba.dubbo.common.serialize.objectoutput;","com.alibaba.dubbo.common.serialize.seri","com.alibaba.dubbo.common.serialize.serialization;","com.alibaba.dubbo.common.status.statuscheck","com.alibaba.dubbo.common.status.statuschecker;","com.alibaba.dubbo.common.status.support.loadstatuscheck","com.alibaba.dubbo.common.status.support.memorystatuscheck","com.alibaba.dubbo.common.threadpool.cachedthreadpool","com.alibaba.dubbo.common.threadpool.fixedthreadpool","com.alibaba.dubbo.common.threadpool.threadpool","com.alibaba.dubbo.common.threadpool.threadpool;","com.alibaba.dubbo.common.url;","com.alibaba.dubbo.config.spring.extension.springextensionfactori","com.alibaba.dubbo.container.contain","com.alibaba.dubbo.container.container;","com.alibaba.dubbo.container.main","com.alibaba.dubbo.container.page.pagehandl","com.alibaba.dubbo.container.page.pagehandler;","com.alibaba.dubbo.container.page.pages.homepagehandl","com.alibaba.dubbo.container.page.pages.logpagehandl","com.alibaba.dubbo.container.page.pages.statuspagehandl","com.alibaba.dubbo.container.page.pages.systempagehandl","com.alibaba.dubbo.container.spring.jettycontain","com.alibaba.dubbo.container.spring.log4jcontain","com.alibaba.dubbo.container.spring.springcontain","com.alibaba.dubbo.monitor.monitor","com.alibaba.dubbo.monitor.monitor;","com.alibaba.dubbo.monitor.monitorfactori","com.alibaba.dubbo.monitor.monitorfactory;","com.alibaba.dubbo.monitor.support.dubbo.dubbomonitorfactori","com.alibaba.dubbo.registry.directory.registryexporterlisten","com.alibaba.dubbo.registry.directory.registrystatuscheck","com.alibaba.dubbo.registry.notifylistener#notify(list)","com.alibaba.dubbo.registry.notifylistener#notify(list)}的参数。","com.alibaba.dubbo.registry.notifylistener;","com.alibaba.dubbo.registry.registri","com.alibaba.dubbo.registry.registry;","com.alibaba.dubbo.registry.registryfactori","com.alibaba.dubbo.registry.registryfactory;","com.alibaba.dubbo.registry.registryservice#lookup(url)}的返回值。","com.alibaba.dubbo.registry.support.dubbo.dubboregistryfactori","com.alibaba.dubbo.remoting.cli","com.alibaba.dubbo.remoting.dispatch","com.alibaba.dubbo.remoting.dispatcher;","com.alibaba.dubbo.remoting.exchange.exchang","com.alibaba.dubbo.remoting.exchange.exchangecli","com.alibaba.dubbo.remoting.exchange.exchangeclient;","com.alibaba.dubbo.remoting.exchange.exchanger.headerexchang","com.alibaba.dubbo.remoting.exchange.exchanger;","com.alibaba.dubbo.remoting.exchange.exchangeserv","com.alibaba.dubbo.remoting.exchange.exchangeserver;","com.alibaba.dubbo.remoting.p2p.network","com.alibaba.dubbo.remoting.p2p.networker;","com.alibaba.dubbo.remoting.p2p.support.filenetwork","com.alibaba.dubbo.remoting.p2p.support.multicastnetwork","com.alibaba.dubbo.remoting.serv","com.alibaba.dubbo.remoting.telnet.support.cleartelnethandl","com.alibaba.dubbo.remoting.telnet.support.exittelnethandl","com.alibaba.dubbo.remoting.telnet.support.helptelnethandl","com.alibaba.dubbo.remoting.telnet.support.statustelnethandl","com.alibaba.dubbo.remoting.telnet.telnethandl","com.alibaba.dubbo.remoting.telnet.telnethandler;","com.alibaba.dubbo.remoting.transport","com.alibaba.dubbo.remoting.transport.dispatcher.all.alldispatch","com.alibaba.dubbo.remoting.transport.dispatcher.connection.connectionordereddispatch","com.alibaba.dubbo.remoting.transport.dispatcher.direct.directdispatch","com.alibaba.dubbo.remoting.transport.dispatcher.execution.executiondispatch","com.alibaba.dubbo.remoting.transport.dispatcher.message.messageonlydispatch","com.alibaba.dubbo.remoting.transport.transporter.abstractclient;","com.alibaba.dubbo.remoting.transport.transporter.abstractserver;","com.alibaba.dubbo.remoting.transport.transporter.grizzly.grizzlytransport","com.alibaba.dubbo.remoting.transport.transporter.mina.minatransport","com.alibaba.dubbo.remoting.transport.transporter.netty.nettytransport","com.alibaba.dubbo.remoting.transporter;","com.alibaba.dubbo.rpc.cluster.clust","com.alibaba.dubbo.rpc.cluster.cluster;","com.alibaba.dubbo.rpc.cluster.directory;","com.alibaba.dubbo.rpc.cluster.loadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.leastactiveloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.randomloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance.roundrobinloadbal","com.alibaba.dubbo.rpc.cluster.loadbalance;","com.alibaba.dubbo.rpc.cluster.merg","com.alibaba.dubbo.rpc.cluster.merger.arraymerg","com.alibaba.dubbo.rpc.cluster.merger.listmerg","com.alibaba.dubbo.rpc.cluster.merger.mapmerg","com.alibaba.dubbo.rpc.cluster.merger.setmerg","com.alibaba.dubbo.rpc.cluster.merger;","com.alibaba.dubbo.rpc.cluster.rout","com.alibaba.dubbo.rpc.cluster.router.filerouterfactori","com.alibaba.dubbo.rpc.cluster.router.scriptrouterfactori","com.alibaba.dubbo.rpc.cluster.routerfactori","com.alibaba.dubbo.rpc.cluster.routerfactory;","com.alibaba.dubbo.rpc.cluster.support.abstractclusterinvoker;","com.alibaba.dubbo.rpc.cluster.support.availableclust","com.alibaba.dubbo.rpc.cluster.support.failbackclust","com.alibaba.dubbo.rpc.cluster.support.failfastclust","com.alibaba.dubbo.rpc.cluster.support.failoverclust","com.alibaba.dubbo.rpc.cluster.support.failsafeclust","com.alibaba.dubbo.rpc.cluster.support.forkingclust","com.alibaba.dubbo.rpc.config.spring.status.datasourcestatuscheck","com.alibaba.dubbo.rpc.config.spring.status.springstatuscheck","com.alibaba.dubbo.rpc.dubbo.dubboprotocol","com.alibaba.dubbo.rpc.dubbo.status.serverstatuscheck","com.alibaba.dubbo.rpc.dubbo.status.threadpoolstatuscheck","com.alibaba.dubbo.rpc.dubbo.telnet.changetelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.counttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.currenttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.invoketelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.listtelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.porttelnethandl","com.alibaba.dubbo.rpc.dubbo.telnet.tracetelnethandl","com.alibaba.dubbo.rpc.export","com.alibaba.dubbo.rpc.exporter;","com.alibaba.dubbo.rpc.exporterlisten","com.alibaba.dubbo.rpc.exporterlistener;","com.alibaba.dubbo.rpc.filt","com.alibaba.dubbo.rpc.filter.accesslogfilt","com.alibaba.dubbo.rpc.filter.activelimitfilt","com.alibaba.dubbo.rpc.filter.classloaderfilt","com.alibaba.dubbo.rpc.filter.consumercontextfilt","com.alibaba.dubbo.rpc.filter.contextfilt","com.alibaba.dubbo.rpc.filter.countfilt","com.alibaba.dubbo.rpc.filter.deprecatedfilt","com.alibaba.dubbo.rpc.filter.echofilt","com.alibaba.dubbo.rpc.filter.exceptionfilt","com.alibaba.dubbo.rpc.filter.executelimitfilt","com.alibaba.dubbo.rpc.filter.genericfilt","com.alibaba.dubbo.rpc.filter.genericimplfilt","com.alibaba.dubbo.rpc.filter.tokenfilt","com.alibaba.dubbo.rpc.filter;","com.alibaba.dubbo.rpc.http.hessian.hessianprotocol","com.alibaba.dubbo.rpc.http.httpprotocol","com.alibaba.dubbo.rpc.injvm.injvmprotocol","com.alibaba.dubbo.rpc.invocation;","com.alibaba.dubbo.rpc.invok","com.alibaba.dubbo.rpc.invoker;","com.alibaba.dubbo.rpc.invokerlisten","com.alibaba.dubbo.rpc.invokerlistener;","com.alibaba.dubbo.rpc.listener.deprecatedinvokerlisten","com.alibaba.dubbo.rpc.protocol","com.alibaba.dubbo.rpc.protocol;","com.alibaba.dubbo.rpc.proxy.javassistproxyfactori","com.alibaba.dubbo.rpc.proxy.jdkproxyfactori","com.alibaba.dubbo.rpc.proxyfactori","com.alibaba.dubbo.rpc.proxyfactory;","com.alibaba.dubbo.rpc.result;","com.alibaba.dubbo.rpc.rmi.rmiprotocol","com.alibaba.dubbo.rpc.rpcexception;","com.alibaba.dubbo.rpc.support.abstractexporter;","com.alibaba.dubbo.rpc.support.abstractinvoker;","com.alibaba.dubbo.validation.support.jvalidation.jvalid","com.alibaba.dubbo.validation.valid","com.alibaba.dubbo.validation.validation;","com.alibaba.dubbo.validation.validator;","com.alibaba.dubbo.xxx.yyyinvokerwrapp","com.alibaba.xxx.xxxprotocol。dubbo","com.alibaba.xxx;","com.xxx;","comment","common","compat","compil","config","connect","connect(url","consum","consumer,","consumers,","contain","container,","context","context.xml","contributor","convent","count(url","count,","cover","createexporter(str","createexporter(url","d","dbunit。","dcom.xxx.xxxservice=dubbo://10.1.1.1:1234","ddubbo:application.logger=xxx","declipse.workspace=/path/to/the/workspace/","default","default\",剔除添加所有缺省扩展点。","defaultvers","defaultversion)","defaultversion;","default,表示缺省扩展点插入的位置。比如:filter=\"xxx,default,yyy\",表示","delay,而网站的同学也希望参与进来,加上领域的推动,所以平台计划将部分项目对公司内部开放,让大家一起来实现,dubbo","delegate.error(msg","deleteuser()。","deleteuser(id),删除用户并返回被删除的用户,考虑改为","democlientact","demoservic","demoservice)","demoservice.sayhello(\"world\"","demoservice;","demoserviceimpl","deploy_home=`dirnam","deserialize(paramet","destroy","destroyed(invok","detail=\"...\")","direct,","directori","directory)","directory,","dispatch","dispather:","dmaven.test.skip","doc","doclose()","doconnect()","doinvoke(inv);","doinvoke(invoc","done","doopen()","down)下来。","dsl","dubb","dubbo","dubbo.git","dubbo.jar","dubbo.properties,因为该约定经常造成配置冲突。","dubbo.properties,改为全","dubbo/tag","dubbo://","dubbo://servic","dubbo>","dubbobeandefinitionpars","dubbocodec","dubboinvoker、","dubbonamespacehandler。","dubboprotocol","dubboprotocol的","dump","dump_date=`d","dump_dir=$dump_root/dump","dump_pids=`p","dump_root=$output_home/dump","dump,进行自动备份,这样就不会有人为疏忽。dump脚本示例:","duplic","duplicate()","duplicate.checkduplicate(\"xxx.properties\");","duplicate.checkduplicate(xxx.class);","e","e)","e);","easymock,集成测试用","echo","echo,","eclips","eclipse:configur","eclipse:eclips","empti","enumer","error","error(str","errorcod","except","exchang","exchangechannel,","exchangecli","exchangeclient,","exchangehandl","exchanger,","exchangeserv","exectorservic","execute()","execute(),那拦截器接口通常为","execute(execution),原理一样。当然,实现方式可以任意,上面只是举例。","execution,","executor","exit","export","export()","export()传入的invoker由框架实现并传入,协议不需要关心。","export()必须是幂等的,也就是暴露同一个url的invoker两次,和暴露一次没有区别。","export(dubbo://provid","export(invok","export(registry://registri","export(str","export(url","exported(export","exporter)","exporter,","exporterlisten","exporter,此处用于","exportlistener,","extend","extens","extension\");","extensionfactori","extensionload","f","factori","factory、ioc、osgi","fail","failed?","failover,","failsaf","fi","file","file.endswith(\".jar\"))","file.length()","files);","files.add(file);","files.size()","filter","filterchain","filter,而不是覆盖。比如:","final","final/html/introduction.html","final,以免被中途误修改引用。不要以为这个字段是私有的,这个类的代码都是我自己写的,不会出现对这个字段的重新赋值。要考虑的一个因素是,这个代码可能被其他人修改,他不知道你的这个弱约定,fin","find","fix","fixed,","foo1\",剔除添加缺省扩展点","foo1。比如:filter=\"","fork","ga","gccapac","gcutil","generalservic","generalserviceimpl","generic,","get(object","getbean","getcache(url","getchannel()","getchannel(inetsocketaddress","getchannels()","getexecutor()","getextension(class","getinvok","getinvoker(t","getlogger(url","getmonitor(url","getname()","getproxy(invok","getregistry(dubbo://registri","getregistry(url","getroute(file://path/file.js?router=script)","getroute(script://path/file.js?type=js&rule=encode(function{...}))","getroute(script://registri","getuser()","getvalidator(url","getversion()","getversion(){","getversion(class","getversion(version.class,","git","github","grep","grizzli","group","handler)","handler);","hashset();","head","heap","hello","hessian","hessianrpcinvoker、","histo","host","host,","host/com.alibaba.dubbo.registry.registryservice?export=url.encode(\"dubbo://servic","host/com.alibaba.dubbo.registry.registryservice?refer=url.encode(\"consumer://consum","host/com.foo.fooservice?version=1.0.0\")。","host/com.foo.fooservice?version=1.0.0\"),","host/com.foo.fooservice?version=1.0.0。","host/com.foo.fooservice?version=1.0.0,然后基于扩展点自适应机制,通过提供者","host_name=`hostname`","http","http://javatar.iteye.com/blog/1041832","http://javatar.iteye.com/blog/1056664","http://javatar.iteye.com/blog/690845","http://javatar.iteye.com/blog/706098","http://javatar.iteye.com/blog/804187","http://javatar.iteye.com/blog/949527","http://oldratlee.com/380/tech/java/robust","https://github.com/apache/incub","i);","ic","id","idea","idea:idea","id,在获取","if(是否有url类型方法参数?)","if(是否有方法类型上有url属性)","if(获取的url","illegalargumentexception(\"url","illegalstateexception(\"fail","illegalstateexception。如果不设置则缺省使用","impel","impl","impl.refer();","impl;","implemenet","implement","implement.html","import","inetaddress.getlocalhost()","inf","inf/dubbo/com.alibaba.dubbo.cache.cachefactory:","inf/dubbo/com.alibaba.dubbo.common.compiler.compiler:","inf/dubbo/com.alibaba.dubbo.common.extension.extensionfactory:","inf/dubbo/com.alibaba.dubbo.common.logger.loggeradapter:","inf/dubbo/com.alibaba.dubbo.common.serialize.serialization:","inf/dubbo/com.alibaba.dubbo.common.status.statuschecker:","inf/dubbo/com.alibaba.dubbo.common.threadpool.threadpool:","inf/dubbo/com.alibaba.dubbo.container.container:","inf/dubbo/com.alibaba.dubbo.container.page.pagehandler:","inf/dubbo/com.alibaba.dubbo.monitor.monitorfactory:","inf/dubbo/com.alibaba.dubbo.registry.registryfactory:","inf/dubbo/com.alibaba.dubbo.remoting.dispatcher:","inf/dubbo/com.alibaba.dubbo.remoting.exchange.exchanger:","inf/dubbo/com.alibaba.dubbo.remoting.p2p.networker:","inf/dubbo/com.alibaba.dubbo.remoting.telnet.telnethandler:","inf/dubbo/com.alibaba.dubbo.remoting.transporter:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.cluster:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.loadbalance:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.merger:","inf/dubbo/com.alibaba.dubbo.rpc.cluster.routerfactory:","inf/dubbo/com.alibaba.dubbo.rpc.exporterlistener:","inf/dubbo/com.alibaba.dubbo.rpc.filter:","inf/dubbo/com.alibaba.dubbo.rpc.invokerlistener:","inf/dubbo/com.alibaba.dubbo.rpc.protocol,内容为:","inf/dubbo/com.alibaba.dubbo.rpc.protocol:","inf/dubbo/com.alibaba.dubbo.rpc.proxyfactory:","inf/dubbo/com.alibaba.dubbo.validation.validation:","inf/dubbo/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔。","inf/servic","inf/services/","inf/services/com.alibaba.dubbo.rpc.protocol,内容为","inf/spring.handl","info","info(str","init","injvminvoker、","input)","inputstream","instal","int","intellij","interfac","interface)","introduct","inv)","invoc","invocation)","invocation,","invocationhandler,","invok","invoke()","invoke(),那拦截器接口通常为","invoke(invoc","invoke(invocation),invoc","invoke(invok","invoke(method","invoke(str","invoker)","invoker,","invoker.invoke(invocation);","invokerlisten","invokerlistener,","invokers,","invoker,也就是去掉","invoker,减少概念。","invoker,这样其它人只要关注","invoker:","invoker:服务提供","ioc","ioexcept","ip","ip、使用的是哪个注册中心;调用的是哪个服务、哪个方法等等。这些信息如果不给出,那么事后人工收集的,问题过后现场可能已经不能复原,加大排查问题的难度。","isavail","jar","java","java.util.concurrent.executor;","java_home=/usr/java","javadoc","javaey","jboss","jcr/jsr283","jdbc","jdk","jetti","jira","jms&activemq","jmx","jndi","jrobin","jruby.jar","json","jsonact","jsonaction,这就是","jsonrender","jsr140&slp","jsr181&cxf(webservice)","jsr311&jsr339(restfulwebservice)","jta/xa分布式事务","junit","jvm","key","key)","key,","key1","key2","key,","key,即可以代理真正的实现类上,可以动态生成。","key,如果该","key,缓存返回结果。","kill","kit),用户增加一种扩展实现,只需通过","languag","lazi","lazy连接","ldap","limit","limitfilt","list","list>","listen","listener)","listener);","loadbal","loadbalance)","loadbalance,","log","log4j","logger","logger.error(\"dupl","logger.error(e.getmessage(),","loggeradapt","loggerfactory.getlogger(version.class);","logstash","logutil","lookup(url","m2_repo","main","makecar()","makecar();","makecar(url","makewheel","makewheel();","makewheel(url","manifest","map","map,","map,可以认为是可靠的,而写入数据库等,可以认为是不可靠的。开发人员必须在写每一行代码时,都注意它的可靠性与否,在代码中尽量划分开,并对失败做异常处理,并为容错,自我保护,自动恢复或切换等补偿逻辑提供清晰的切入点,保证后续增加的代码不至于放错位置,而导致原先的容错处理陷入混乱。","master","matcher","matcher.group(1);","matcher.groupcount()","maven","maven_opt","maven_opts=","maven项目结构:","max)","merge(directori","merge(t...","merger","messag","message)","message,","meta","method","method!\");","method,","methodname,","microkernel","mina","mina,","mkdir","mock","mock,","monitor","monitor,","monitorfactori","monitorfactory,","monitorservic","msg)","msg,","mvn","n","nagio","name)","name);","name;","netti","netty,","network","new","newinstance()","notify();","notify(dubbo://provid","notify(list","notify(route://registri","notifylisten","notifylistener.java:","null","null\");","null)","object","object[]","objectinput","objectinput,","objectoutput","objectoutput,","object,所以将实例方法存储在","ocp","onchanged()。比如远程调用框架,当网络断开或连上应该发出一个事件,当出现错误也可以考虑发出一个事件,这样外围应用就有可能观察到框架内部的变化,做相应适应。","onreturn","onreturn/onerror...","orm","osgi","osgi,","osgi,却为","osgi,这样序列化时,io","output)","output_home=~/output","outputstream","overrides,允许只通知其中一种类型,但该类型的数据必须是全量的,不是增量的。","owner","owner,确保","p","packag","pagehandl","paramet","parameters,","parametertyp","parametertypes,","params);","partner","path","path)","pattern","pattern.compile(\"([0","patternercheck","pid","plexus。通常核心是不应该带有功能性的,而是一个生命周期和集成容器,这样各功能可以通过相同的方式交互及扩展,并且任何功能都可以被替换。如果做不到微核,至少要平等对待第三方,即原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到。原作者要把自己也当作扩展者,这样才能保证框架的可持续性及由内向外的稳定性。","plugin","plugin.xml","plugin.xml,struts2","plugin,dubbo","pojo","port,","prefer","privat","program","properti","propertyplaceholderconfigur","protect","protobuf","protocol","protocol)","protocol,","protocol;","protocolfilterwrapp","protocollistenerwrapp","provid","provider,","proxi","proxy,","proxyfactori","proxy,用户代码通过这个","public","publish","publisher,","push","put(object","queue","r","racecar","racecar(wheel,","racecarmak","read(file))","ref","ref(如:helloworldimpl),然后通过","refer","refer()","refer()返回的invoker由协议实现,协议通常需要在此invoker中发送远程请求。","refer(class","refer(dubbo://provid","refer(registry://registri","referenceconfig","referenceconfig.get()","referred(invok","register(dubbo://provid","register(url","registri","registry,","registry://","registry://registri","registryfactori","registryfactory,","registryfactory.java:","registryprotocol","registryservic","registryservice.java:","remot","remoteaddress)","remoteexcept","remotingexcept","remotingexception;","remotingexception{","render","request","request,","request/respons","request,所以在","resourc","respons","response。如果再来一个会话消息发送需求,那就再加一个","result","result;","results)","return","returntypes,","rmi","rmi,","rmi/dubbo/web","rmiinvoker、","rmiprotocol类的","rmi协议则不需要使用此包。","rout","route,","router,","routerfactori","routes,","routinginvokergroup","routing。所以,将","rpc","rpcexcept","rpcexception;","rpcexception。","rubi","rubyscriptengin","ruby,而不是真正失败的原因。","run","run(url","run?而哪些又是不能踢掉的?基于这样考虑,可以将","sa","sayhello(str","schame","schema,配置简化后很方便。当然,也有它的缺点,就是强依赖","scope","scriptengine,通过","select(list>","serial","serialization,","serialize(paramet","server","server,","servic","service,","serviceconfig","serviceconfig,","serviceconfig.export()","serviceload","servicemanag","serviceproxi","service,napoli","session","sessionrequest/sessionrespons","session,不需要","set","setdemoservice(demoservic","setter","settings\\.m2\\repositori","setwheelmaker(wheelmak","simpledeploy","simpleschedul","skeleton,","snmp","socket","source:jar","spi","spi。","spring","spring,可以提编程接口做了配套方案。","sql","src","standlon","start()","started!\"","static","staticmap","statist","statistics)","statu","statuscheck","sticki","stop()","string","string[]","string[]。如果选用增量式扩展,应该是保持原有接口不变,增加一个","strut","stub","subscribe(dubbo://registri","subscribe(url","subscriber,","subvers","suffix(file)).addparameter(\"rule\",","summary=\"...\",","super(invoker);","super(type,","super(url,","super.unexport();","support","svn","system_properties_mode_override,可以通过","t","tck","tck,做一个","tck,即可确保与框架的其它部分兼容运行,可以有效提高整体健状性,也方便第三方扩展者接入,加速开源社区的成熟。","tcp","teardown","telnet","telnet(channel","telnethandl","telnethandler,","templat","test","testng,数据库测试用","this.demoservic","this.wheelmak","thread.currentthread().getcontextclassloader().getresources(path);","threadpool","threadpool:","thrift","throw","throwabl","throwable;","ticket","timeout","todo","token","token,","tomcat/jboss","tool","transport","transporter,","tri","try...fin","type","type,","type1","type2","ubbo,隐藏","uddi","udp","unexport()","unexported(export","unix","unregister(url","unsubscribe(url","unsupportedoperationexception(\"i","updat","url","url)","url);","url,","url.addparameters(url.getparameteranddecoded(\"refer\"))","url.get(\"wheel.type\")","url.getfile();","url.getparameteranddecoded(\"export\"))","url.setprotocol(url.getparameter(\"registry\",","url.setprotocol(url.getparameter(\"router\",","urls);","urls.nextelement();","url参数全部用小写,多个单词用\".\"号分隔","url,但","url,先注册到注册中心。","url,如:","us","util","valid","validate(invoc","valu","value)","value)传递配置信息。","value,使用缺省的扩展。如果没有设定缺省扩展,则方法调用会抛出","value,使用缺省的扩展(在接口的","value,则使用","veloc","velocityact","velocityaction,要用","velocityrender","version","version()","version.getversion(),","version.length()","version;","version_pattern","version_pattern.matcher(file);","void","wait();","warn","web","web.xml","webserviceinvok","wheel","wheel.type,","wheelmak","wheelmaker)","wheelmaker.makewheel();","wheelmaker.makewheel(url);","wheelmaker;","width","window","workspac","wrapper","wrapper类内容:","write","xml","xmx1024m","xsocket","xx:maxpermsize=512m","xxx","xxx,yyy,aaa,bbb","xxx.jar","xxx=com.alibaba.xxx.xxxprotocol","xxx=com.xxx.xxxcachefactori","xxx=com.xxx.xxxclust","xxx=com.xxx.xxxcompil","xxx=com.xxx.xxxcontain","xxx=com.xxx.xxxdispatch","xxx=com.xxx.xxxexchang","xxx=com.xxx.xxxexporterlisten","xxx=com.xxx.xxxextensionfactori","xxx=com.xxx.xxxfilt","xxx=com.xxx.xxxinvokerlisten","xxx=com.xxx.xxxloadbal","xxx=com.xxx.xxxloggeradapt","xxx=com.xxx.xxxmerg","xxx=com.xxx.xxxmonitorfactori","xxx=com.xxx.xxxnetwork","xxx=com.xxx.xxxpagehandl","xxx=com.xxx.xxxprotocol","xxx=com.xxx.xxxproxyfactori","xxx=com.xxx.xxxregistryfactori","xxx=com.xxx.xxxrouterfactori","xxx=com.xxx.xxxseri","xxx=com.xxx.xxxstatuscheck","xxx=com.xxx.xxxtelnethandl","xxx=com.xxx.xxxthreadpool","xxx=com.xxx.xxxtransport","xxx=com.xxx.xxxvalid","xxxcach","xxxcache(url,","xxxcachefactori","xxxcachefactory.java","xxxcachefactory.java:","xxxclient","xxxclient(url,","xxxclient.java","xxxclient.java:","xxxcluster","xxxcluster.java","xxxcluster.java:","xxxcompil","xxxcompiler.java","xxxcompiler.java:","xxxcontain","xxxcontainer.java","xxxcontainer.java:","xxxdispatch","xxxdispatcher.java","xxxdispatcher.java:","xxxexchang","xxxexchangecli","xxxexchangeclient(url,","xxxexchangeclient.java","xxxexchangeclient.java:","xxxexchanger.java","xxxexchanger.java:","xxxexchangeserv","xxxexchangeserver(url,","xxxexchangeserver.java","xxxexchangeserver.java:","xxxexport","xxxexporter(invok","xxxexporter(invoker);","xxxexporter.java","xxxexporter.java:","xxxexporterlisten","xxxexporterlistener.java","xxxexporterlistener.java:","xxxextensionfactori","xxxextensionfactory.java","xxxextensionfactory.java:","xxxfilter","xxxfilter.java","xxxfilter.java:","xxxinvok","xxxinvoker(class","xxxinvoker(type,","xxxinvoker.java","xxxinvoker.java:","xxxinvokerlisten","xxxinvokerlistener.java","xxxinvokerlistener.java:","xxxloadbal","xxxloadbalance.java","xxxloadbalance.java:","xxxlogger","xxxlogger(url","xxxlogger.java:","xxxloggeradapt","xxxloggeradapter.java","xxxloggeradapter.java:","xxxmerger","xxxmerger.java","xxxmerger.java:","xxxmonitor","xxxmonitor(url);","xxxmonitor.java","xxxmonitor.java:","xxxmonitorfactori","xxxmonitorfactory.java:","xxxmonitorfactoryjava","xxxnetwork","xxxnetworker.java","xxxnetworker.java:","xxxobjectinput(input);","xxxobjectinput.java","xxxobjectoutput(output);","xxxobjectoutput.java","xxxpagehandl","xxxpagehandler.java","xxxpagehandler.java:","xxxprotocol","xxxprotocol(protocol","xxxprotocol.java","xxxprotocol.java:","xxxprotocolwrapp","xxxproxyfactori","xxxproxyfactory.java","xxxproxyfactory.java:","xxxregistri","xxxregistry(url);","xxxregistry.java","xxxregistry.java:","xxxregistryfactori","xxxregistryfactory.java:","xxxregistryfactoryjava","xxxrouterfactori","xxxrouterfactory.java","xxxrouterfactory.java:","xxxserial","xxxserialization.java","xxxserialization.java:","xxxserver","xxxserver(url","xxxserver(url,","xxxserver.java","xxxserver.java:","xxxstatuscheck","xxxstatuschecker.java","xxxstatuschecker.java:","xxxtelnethandl","xxxtelnethandler.java","xxxtelnethandler.java:","xxxthreadpool","xxxthreadpool.java","xxxthreadpool.java:","xxxtransport","xxxtransporter.java","xxxtransporter.java:","xxxvalid","xxxvalidation.java","xxxvalidation.java:","xxxvalidator(url","xxxvalidator.java:","xxxwrapper,基类都命名为","z","{","{\"key1\",","{\"yyy.invoker.wrapper\"}","{}","|","|awk","||","}","};","↩","《开发指南》翻译","《用户指南》翻译","一些操作","一些设计上的基本常识","一样可以","一样约定一个覆盖配置文件,在程序外部,修改部分配置,便于测试。","上","上一点的子问题。dubbo","上发表的系列文章。","上图是服务提供者暴露服务的主过程:","上图是服务消费的主过程:","上找","上浏览源代码","上面代码中的","上面的设计,不自觉的就将","上面这个类会被封装成为一个","下加载该配置。我们平台的很多项目也使用类似策略,如:dubbo.properties,comsat.xml","下放一个约定的配置,如果项目中有多个,通常会取jvm加载的第一个,为了不被这么低级的问题折腾,和上面的重复jar包一样,在配置加载的地方,加上:","下放置接口类全名文件,内容为每行一个实现类类名,就像","下的路径是","下约定一个以项目为名称的","下面我们用一个精简的图来说明最重要的两种","下面是","不会版本过多,导致开发和维护成本剧增","不再开发,应用碰到","不存在,导致","不是扩展点的真正实现。它的用途主要是用于从","不管选哪种方式,所有配置项,都应保持同一风格,dubbo","不能有子类型,所有类型信息用","不要控制外部对象的生命周期","与","世界里,比较常规的做法,是在","世界里,通常是约定在每个","严格约定warn、error级别记录的内容","个版本并行开发","中","中。","中。新加的","中加上一个全函数的","中加入:","中发送远程请求,export()","中取得回调服务实例的","中实现。此处需要考虑将此逻辑与","中导入","中放置文件:meta","中没有支持","中的下一个(如果不是最后一个),避免碰撞。","中的任何一个","中的加密算法扩展,脚本引擎扩展,新的","中的多个服务,共享连接是说","中碰到有两个相关的场景。","中设定的值)。比如,string[]","中说明。","中返回的实际上是","中途变更时,允许不同类型的数据分开通知,比如:providers,","中配置","中,protocol","中,此处实现需要进行改造。","中,饱和策略是丢弃数据,等待结果也只是请求的超时。","为中心,只有到了暴露给用户使用时,才用","为中心,可以直接初始化配置类,也可以通过","为中心,扩展接口为","为中心,由外层将","为了在传输时能够对回调接口实例进行转换,自动暴露与自动引用目前在","为了更好的解释上面这张图,我们结合服务消费和提供者的代码示例来进行说明:","为服务容器,用于部署运行服务,没有在层中画出。","为统一接口,以","为试点项目之一。","主要原理:","主要原理:consum","主过程为","之前先","之前,yyi","之后。","之间的网络不通,请在","也代表拦截器行为本身,这样上一拦截器的","也可以直接在","也可以通过以下的","也是扩展点则会注入","也能复用序列化等实现。这样,需为传输方式,客户端实现,服务器端实现,协议头解析,数据序列化,都留出不同扩展点。","事件通知","交互,然后发现,原来同步消息发送是会话消息的一种特殊情况,所有场景都传","什么原因","什么是会话?就是一次交互过程。会话中重要的概念是上下文,什么是上下文?比如我们说:“老地方见”,这里的“老地方”就是上下文信息。为什么说“老地方”对方会知道,因为我们前面定义了“老地方”的具体内容。所以说,上下文通常持有交互过程中的状态变量等。会话对象通常较轻,每次请求都重新创建实例,请求结束后销毁。简而言之:把元信息交由实体域持有,把一次请求中的临时状态由会话域持有,由服务域贯穿整个过程。","从","从多个服务提者方中选择一个进行调用","从多个服务提者方中选择一个进行调用。","从文件加载路由规则","从文件加载路由规则:","从注册中心发现引用服务:","从注册中心订阅服务:","仓库。","仓库。通过","付出了代价。而如果采用增量式扩展方式,非","代替,","代理了扩展点。","代码注释写清楚,用中文无妨","代码签出","代码编译器,用于动态生成字节码,加速调用。","代码风格","代表层或模块,蓝色的表示与业务有交互,绿色的表示只对","代表部署逻辑拓扑节点。","以","以上内容都写到ticket的评论上","以上的版本","以字符串传递,不停的解析和拼装,没有一个","以扩展","以用户的方式运行一下功能","任何框架或组件,总会有核心领域模型,比如:spring","任务","优先级","优势","会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。","会为扩展点自动生成自适应扩展点类(通过字节码),并将其实例注入。","会全","会同时接收事件,而去重连另一个注册中心。client","会执行扩展点的拼装操作。","会报一个错,错误信息写着:请在","会火速","会被清除。数据库正常时,这个机制运行良好。但是数据库负荷高时,其上的每个操作都会很慢。这就出现:","传入的","传参,不要自定义","传给","传输层和","传输扩展","传输,而","伪代码","伪装成一个","但它们的作用是一样的,只是一个在客户端,一个在服务器端,却采用了不一样的模型类。","但这些都是核心吗?踢掉哪些,rpc","低","住所有需求,允许外置行为,是框架的基本扩展方式。这样,如果有人想在远程调用前,验证下令牌,验证下黑白名单,统计下日志;如果有人想在","作为","作为上下文信息贯穿整个扩展点设计体系。","作为主干版本的开发,使用分支作为维护版本。可以通过","作为构建工具。","作为要","作为远程服务暴露、调用和治理的解决方案,是应用运转的经络,其本身实现健壮性的重要程度是不言而喻的。","作为配置信息的统一格式,所有扩展点都通过传递","你可以约定:","使用","使用d","使用一致模型:","使用以下命令做一次构建","使用以下命令来生成","使用如下的版本开发模式来保障两者。","使用接口和","使用的","使用该url参数","使用该url属性","依赖。","依赖关系","侦听服务,并接收客户端发来的各种请求,通讯细节由","保持","保持单元测试用例的运行速度,不要将性能和大的集成用例放在单元测试中。","保持单元测试的每个用例都用","保持尽可能少的概念,有助于理解,对于开放的系统尤其重要。另外,各接口都使用一致的概念模型,能相互指引,并减少模型转换,","保证线程安全性和可见性","信息交换层,transport","信息交换层:封装请求响应模式,同步转异步,以","信息交换扩展","信息交换语义。","信息获取","修复代码前先写测试用例","修复代码前先建","修复时","修改后通过","值。","值,来决定代理到哪个实际扩展点。","做为参考值,如果消费方没有配置,就以提供方的配置为准,相当于消费方继承了提供方的建议配置值。而注册中心在传递配置时,也可以在中途修改配置,这样就达到了治理的目的,继承关系相当于:服务消费者","做为扩展方式,要用","做为配置。有时候这类配置也可以用","允许uri相同但参数不同的url并存,不能覆盖。","允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.barservice&version=1.0.0","允许自定义","先看一下","全部","公共契约","公共契约,希望所有扩展点遵守。","公共逻辑模块:包括","共享连接","关于每种协议如","关系说明","关联","其中,refer()","其实是包装的下一拦截器的过程,直到最后一个拦截器的","其实都是","内的","内部交互。","内部再划为","再再比如:无状态消息发送,很简单,序列化一个对象发过去就行。后来有了同步消息发送需求,需要一个","再比如,url","再比如,协议扩展,扩展者可能只是想替换序列化方式,或者只替换传输方式,并且","再比如,现有的:invoker,","再比如:最开始,远程服务都是基于接口方法,进行透明化调用的。这样,扩展接口就是,","再重新传给","写死了。","减少","出来的,我们不自觉选了一个扩展式扩展,把扩展接口改成了","出错?","出问题时的现场信息,即排查问题要用到的信息。如服务调用失败时,要给出使用","分布式服务框架后续如果维护人员增多或变更,会出现质量的下降,","分支","分离","分离可靠操作和不可靠操作","分类","分解成两个层次,只是","分钟、第三次","分钟。","分钟,把重连分散开。","分钟,第二次","划分逻辑拓普节点,保持统一概念。","则将","创建一个实例,这样框架就控制了","初始化时,将","初始化过程细节","到","前面不停的提到代码被其他人修改,这也开发人员要随时紧记的。这个其他人包括未来的自己,你要总想着这个代码可能会有人去改它。我应该给修改的人一点什么提示,让他知道我现在的设计意图,而不要在程序里面加潜规则,或埋一些容易忽视的雷,比如:你用","功能","功能单元测试","加载","加载扩展点时,会检查扩展点的属性(通过set方法判断),如该属性是扩展点类型,则会注入扩展点对象。因为注入时不能确定使用哪个扩展点(在使用时确定),所以注入的是一个自适应扩展(一个代理)。自适应扩展点调用时,选取一个真正的扩展点,并代理到其上完成调用。dubbo","加载扩展点时,自动注入依赖的扩展点。加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,extensionload","加载,如果在","动态代理扩展","包","包下放一个指定文件加载,比如:eclips","包下,放置名为","包中挑一个一定会加载的类,加上重复类检查,给个示例:","包内","包内同名的这个文件,然后进行合并","包内放置文本文件:meta","包内,dubbo","包内,不是","包名称抓取版本号,这个逻辑是辅助性的,但代码却不少,初步测试也没啥问题,但应该在整个","包括监控在内,所有附加功能,全部通过","包的","包,方便用来调试","区分命令与查询,明确前置条件与后置条件","协议不一定要是","协议不关心业务接口的透明代理,以","协议在接收请求时,应记录请求来源方地址信息:rpccontext.getcontext().setremoteaddress();","协议头约定","协议头识别,就会调用","协议头识别,直接调用","协议扩展","协议扩展点,基于扩展点的","协议扩展,封装远程调用细节。","协议的","协议的实现,如果","协议的实现,如果你选择","协议,整个","单元和集成测试","单元测试统一用","即","即:","即可完成桥接,它们可以用公共基类实现此逻辑。","即可,加上","即存在描述配置,也有环境配置。一部分用","即然要扩展,扩展点的加载方式,首先要统一,微核心+插件式,是比较能达到","即:","原则的思路。","原因参见:谈谈扩充式扩展与增量式扩展。","参数","参数中的提供者","参数中的条件,查询提供者","参数回调","参数验证扩展点。","参数(整个扩展点网的上下文信息)。自适应扩展即是从","参数,url","参数,或者像","参见:http://docs.jboss.org/cdi/tck/reference/1.0.1","参见:谈谈扩充式扩展与增量式扩展","反馈修改。","发布前","发现的问题。","发现自己数据被删除时(写入失败),选择等待这段时间再重试。重试时间可以选择指数级增长,如第一次等","发现自己的数据没有了,重新写入自己的数据的反复操作。这些反复的操作又加重了数据库的负荷,恶化问题。","发现问题、添加测试(集成测试)复现总是;owner","发生在","取消注册服务.","取消注册需处理契约:","取消订阅服务.","取消订阅需处理契约:","变更事件监听器,不允许为空","变量指向本地的","另外扩展配置,可能不尽相同。如果只是策略接口实现类替换,可以考虑","另外,dubbo","另外,尽可能做一个标准约定,如果用户按某种约定做事时,就不需要该配置项。比如:配置模板位置,你可以约定,如果放在","另外,每个方法都尽量前置断言传入参数的合法性,后置断言返回结果的合法性,并文档化。","只会作","只对提供方激活,group可选\"provider\"或\"consumer\"","只暴露服务端口:","只负责组装","只负载加载扩展点,包括","可以使用下面逻辑:","可以通过以下的构建命令来跳过单元测试","可编程配置","可能和业务方的","可能存在未知特定场景异常,或被其他的开发人员误修改逻辑(但一般人员不会去掉","可配置一定可编程,并保持友好的","各层说明","合并结果扩展","合并返回结果,用于分组聚合。","合理的方式是,有一个单独的","同一个或是一类异常日志连续出现几十遍的情况,还是常常能看到的。人眼很容易漏掉淹没在其中不一样的重要日志信息。要尽量避免这种情况。在可以预见会出现的情况,有必要加一些逻辑来避免。","同一个或是一类问题不要重复记录多次","同时配置的","名。","名称空间时,会回调","名;key1","后,在提供者可用的情况下,调用会继续发送到上一次的服务提供者。sticki","后,连接需要关闭,另一方面还需要注意如何避免部分","向","向前兼容很好办,你只要保证配置只增不减,就基本上能保证向前兼容。但向后兼容,也是要注意的,要为后续加入新的配置项做好准备。如果配置出现一个特殊配置,就应该为这个“特殊”情况约定一个兼容规则,因为这个特殊情况,很有可能在以后还会发生。比如:有一个配置文件是保存“服务=地址”映射关系的,其中有一行特殊,保存的是“注册中心=地址”。现在程序加载时,约定“注册中心”这个key是特殊的,做特别处理,其它的都是“服务”。然而,新版本发现,要加一项“监控中心=地址”,这时,旧版本的程序会把“监控中心”做为“服务”处理,因为旧代码是不能改的,兼容性就很会很麻烦。如果先前约定“特殊标识+xxx”为特殊处理,后续就会方便很多。","向后兼容性,可以多向html5学习,参见:html5设计原理","向注册中心暴露服务:","启动,因为服务通常不需要","命令和","命令扩展","命令配置:","和","和一个","和服务器端","和服务消费","和部门以及产品线的需求,势必会将很多不相干的功能凑在一起,客户可以选择性的使用。为了兼容更多的需求,每个产品,每个框架,都在不停的扩展,而我们经常会选择一些扩展的扩展方式,也就是将新旧功能扩展成一个通用实现。我想讨论是,有些情况下也可以考虑增量式的扩展方式,也就是保留原功能的简单性,新功能独立实现。我最近一直做分布式服务框架的开发,就拿我们项目中的问题开涮吧。","哪个","哪些是关键信息呢?","因为使用环境的不确定因素很多,框架总会有一些配置,一般都会到","因为所依赖的","因为线上只有一个注册中心,这样的配置是没有问题的,而测试环境可能有两个注册中心,测试人员不可能去修改配置,改为:","因为这些配置和业务逻辑相关,放在代码里也是合理的。","图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,servic","图中只包含","图中小方块","图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。","图中的","图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。","图中背景方块","图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。","图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。","图例说明:","在","在classpath搜文件","在一个","在会自动注入依赖的扩展点。extensionload","在加载扩展点时,如果加载到的扩展点有拷贝构造函数,则判定为扩展点","在很多场景下都使用","在所有的扩展点上添加了逻辑,有些类似","在扩展点实现调用该方法,并返回结果。","在扩展类的","在有注册中心,通过注册中心发现提供者地址的情况下","在有注册中心,需要注册提供者地址的情况下","在根据","在没有注册中心,直接暴露提供者的情况下","在没有注册中心,直连提供者的情况下","在给应用排错时,最怕的就是那种只有简单的一句错误描述,啥信息都没有的异常信息。比如上次碰到一个","在缺省","在遇到","在重启前,先手工将出错现场所有数据备份一下,所以最好在","在重要的过程上设置拦截接口","均会生效。如果要覆盖,需配置:","坏味道","基于","基于传输层之上,实现","基于复用度分包,总是一起使用的放在同一包下,将接口和基类分成独立模块,大的实现也使用独立模块。","基于扩展点自适应机制,所有的","基于扩展点自适应机制,通过","基于扩展点自适应机制,通过提供者","基本设计原则","基础框架,在此之上实现","基类也是","增加了对扩展点","增量式扩展,而不要扩充原始核心概念","处于可用状态,则进行后续调用","处理。","处理服务暴露的关键就在","处理,会话消息发送,再加一个","多个服务调用是通过同一个","多个测试用例不通过。时间一紧,谁有这个闲功夫去改这么多形态各异的测试用例?久而久之,这个测试代码就已经不能真实反应代码现在的状况,很多时候会被迫绕过。最好的情况是,修改一行代码,有且只有一行测试代码不通过。如果修改了代码而测试用例还能通过,那也不行,表示测试没有覆盖到。另外,可","多个项目在使用,每天都要去帮应用查问题,来来回回,发现大部分都是配置错误,或者重复的文件或类,或者网络不通等,所以准备在新版本中加入防痴呆设计。估且这么叫吧,可能很简单,但对排错速度还是有点帮助,希望能抛砖引玉,也希望大家多给力,想出更多的防范措施共享出来。","够稳定后:","大凡发展的比较好的框架,都遵守微核的理念。eclips","大家经常说,魔鬼在细节中,确实如此。","契约文档化","契约:","如url没有value,则使用缺省扩展点实现。如没有扩展点,","如为一个问题准备一个标志,出问题后打日志后设置标志,避免重复打日志。问题恢复后清除标志。","如果","如果manifest.mf规范中没有版本号,基于jar包名获取版本号","如果一个类可以成为不变类(immut","如果一种类型的数据为空,需通知一个empty协议并带category参数的标识性url数据。","如果不可恢复或需要报警,打印","如果你要写个远程调用框架,那远程调用的过程应该有一个统一的拦截接口。如果你要写一个","如果可恢复异常,或瞬时的状态不一致,打印","如果可能,给出问题的原因和解决方法。这让维护和问题解决变得简单,而不是寻求精通者(往往是实现者)的帮助。","如果大家有兴趣,也可以一起研究,和行知一块讨论。","如果所有的服务提供者都不可用,重新遍历整个列表(优先从没有选过的列表中选择),判断是否有可用的服务提供者(选择过程中,不可用的服务提供者可能会恢复到可用状态),如果有,则进行后续调用","如果扩展点加载失败,连扩展点的名称都拿不到了。比如:jdk","如果是dynamic=false的持久存储数据,找不到注册数据,则抛illegalstateexception,否则忽略。","如果是扩展功能,直接新增工程,黑盒依赖","如果是改","如果有多个,就表示重复","如果没有订阅,直接忽略。","如果确保进入集合的元素是可控的且是足够少,则可以放心使用。这是大部分的情况。如果不能保证,则使用有有界的集合。当到达界限时,选择一个合适的丢弃策略。","如果第一步选择的服务提供者不可用,则从剩余服务提供者列表中继续选择,如果可用,进行后续调用","如果第三步没有选择出可用的服务提供者,会选第一步选出的","如果采用增量式扩展,无状态消息发送原封不动,同步消息发送,在无状态消息基础上加一个","子包下,不同实现用放在以扩展点名字命名的子包下。","字串就报警,又尽量减少了发生。过多的报警会让人疲倦,使人对报警失去警惕性,使","存在同样的配置时,可能误加载,以及在","存在多个服务提供者的情况下,首先根据","完成实现。(保证两方的时间投入","完成,extensionload","定义","定期升级版本用户带来了不安。这是一个假命题,说明如下:","实例(如上图中的红色部分),这是服务消费的关键。接下来把","实例。这样当网络通讯层收到一个请求后,会找到对应的","实例可以提取约定","实例的细节和上一章节所描述的类似。","实例的逻辑是固定,指定提取的","实例,从而真正调用了服务提供者的代码。dubbo","实例,到这一步就完成具体服务到","实例,并新生成一个","实例,并调用它所对应的","实例,直到扩展点方法执行时才决定调用是一个扩展点实现。","实现。","实现。adapt","实现了真正的远程服务调用。","实现会将收到的调用转给目标接口,这样就能将新功能增量到旧功能上,并保持原来结构的简单性。","实现先查找","实现即可。","实现扩展点的通用行为,而不要用基类,比如负载均衡之前的","实现是","实现是在加载扩展点里动态生成。指定提取的","实现来调用对应实现的真正的","实现类内容","实现类的实例报上来,框架只是使用这些实例,这些对象是怎么创建的,怎么销毁的,都和框架无关,框架最多提供工具类辅助管理,而不是绝对控制。","实现类的生命周期,action","实现类的类名或类元信息报上来,然后在内部通过反射","实现细节","实现细节:","实现细节:参数的传递采用","实现细节:对于同一个地址由于使用了共享连接,那","实现,web","实现,每个功能都是调用链上的一环。","实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。","容器。自已造一个小的","容器去加载服务。","容器扩展","容器模块:是一个","容器的特性,没必要用","容器,也觉得有点过度设计,所以打算采用最简单的","容错","容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。","对于","对于容错行为的测试,比如","对于框架的开发人员,对线程安全性和可见性的深入理解是最基本的要求。需要开发人员,在写每一行代码时都应在潜意识中确保其正确性。因为这种代码,在小并发下做功能测试时,会显得很正常。但在高并发下就会出现莫明其妙的问题,而且场景很难重现,极难排查。","对于环境配置,在","对于集合类扩展点,比如:filter,","对产品都很重要。但是添加新功能会影响稳定性,dubbo","对其它层都不会造成影响,因为只有一个提供者时,是不需要","对外的","对外的唯一异常类型,所有内部异常,如果要抛出给用户,必须转为","对多种相似类型的抽象,用基类实现,比如","对应","对应不起来,当用户执行","对应的参数值(实例方法)加入到异步调用的回调列表中。","对等网络节点组网器。","对象。","对象封装了本来要执行过程的上下文,并且","对象是不能直接","对象的","对象转换","对象都转换成","对象(包含了key","将","将多个提供者引用,通过","将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。","就出现过这样的问题,中间层用“地址”做为缓存","就可以完成非透明的","就是一个不变契约。","就是上图中服务消费端的","就要留一些扩展点,让参与者尽量黑盒扩展,而不是白盒的修改代码,否则分支,质量,合并,冲突都会很难管理。","就需要特别注意,一方面要满足对同一个地址","尽可能携带完整的上下文信息,比如出错原因,出错的机器地址,调用对方的地址,连的注册中心地址,使用","尽可能用","尽早失败也应该成为潜意识,在有传入参数和状态变化时,均在入口处全部断言。一个不合法的值和状态,在第一时间就应报错,而不是等到要用时才报错。因为等到要用时,可能前面已经修改其它相关状态,而在程序中很少有人去处理回滚逻辑。这样报错后,其实内部状态可能已经混乱,极易在一个隐蔽分支上引发程序不可恢复。","尽早失败和前置断言","尽量保持子包依赖父包,而不要反向。","尽量减少","尽量将直接原因写在最前面,所有上下文信息,在原因后用键值对显示。","尽量采用","层","层为","层只负责单向消息传输,是对","层和","层封装了所有接口的透明化代理,而在其它层都以","层放在","层是在传输层之上封装了","层都放在","展开总设计图右边服务消费方引用服务的蓝色初始化链,时序图如下:","展开总设计图左边服务提供方暴露服务的蓝色初始化链,时序图如下:","展开总设计图的红色调用链,如下:","属性转成","嵌套,保持","工程。","已注册信息列表,可能为空,含义同{@link","已注册信息列表,总不为空,含义同{@link","已知扩展","已认领","并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*","并约定所有插件,都必须标注:@extension(\"name\"),作为加载后的标识性名称,用于配置选择。","序列化扩展","底层来实现,这就省了不少工作量。","建议应用方在监控中心配置","开发完成","开发的人群。主要涵盖了","开源社区的行知同学已着手研究这一块,他的初步想法是借鉴","开通访问权限\"","异常信息给出解决方案","异常和日志","异常防御,但不忽略异常","异常,就这几个单词,啥都没有,哪个","引用了","引用和","引用服务","引用服务时序","引用监听扩展","引用远程服务:","当","当url中有设置check=false时,连接失败不能抛出异常,需内部自动恢复。","当url设置了category=overrides时,表示分类存储,缺省类别为providers,可按分类部分通知数据。","当url设置了category=overrides,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。","当url设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。","当url设置了check=false时,订阅失败后不报错,在后台定时重试。","当url设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。","当一个注册中心停机时,其它的","当上面执行","当客户端与服务端创建代理时,暂不建立","当收到服务变更通知时触发。","当暴露服务出错时抛出,比如端口已占用","当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。","当有服务引用时,触发该事件。","当有服务暴露时,触发该事件。","当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。","当注册中心重启,网络抖动,需自动恢复订阅请求。","当用户调用","当用户调用refer()所返回的invoker对象的invoke()方法时,协议需相应执行同url远端export()传入的invoker对象的invoke()方法。","当设置check=false时表示不检查连接,否则在连接不上时抛出异常。","当连接服务提供方失败时抛出","当配置了xxx参数,并且参数为有效值时激活,比如配了cache=\"lru\",自动激活cachefilter。","待定","循环等待结果的测试用例,对定时器和网络的测试,用以将定时器中的逻辑抽为方法测试。","微核插件式,平等对待第三方","必填配置估计大家都会检查,因为没有的话,根本没法运行。但对一些可选参数,也应该做一些检查,比如:服务框架允许通过注册中心关联服务消费者和服务提供者,也允许直接配置服务提供者地址点对点直连,这时候,注册中心地址是可选的,但如果没有配点对点直连配置,注册中心地址就一定要配,这时候也要做相应检查。","必须阻塞订阅过程,等第一次通知完后再返回。","忽略异常,返回缺省版本号","性是隔离的基础,把间接依赖的逻辑屏蔽掉。可","性的一个最大的杀手就是静态方法,尽量少用。","性能基准测试","总是以服务接口和数据类型为维度全量通知,即不会通知一个服务的同类型的部分数据,用户不需要对比上一次通知结果。","恢复","成为","成的","我们使用","我们平台的产品越来越多,产品的功能也越来越多。平台的产品为了适应各","我在想,有没有什么是需要大家共同遵守的,根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节。可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记。在每一行代码中都考虑这些因素,是需要很大耐心的,","或","或其它上下文格式,配置信息也转成","或者","或者以上的版本","或者去掉","或者把平时支持应用时遇到的问题及解决办法都写到异常信息里。","或者:","或:","所以,我们需要对核心扩展点写","所在的","所有","所有扩展点参数都包含","所有接口都放在模块的根包下,基类放在","所有服务器均支持","所有细节。","所返回的","才是","打印","打印错误日志,并返回基本版本,因为","执行前加下分页包装,做下数据权限控制,统计下","执行时间;如果有人想在请求执行前检查下角色,包装下输入输出流,统计下请求量,等等,就可以自行完成,而不用侵入框架内部。拦截接口,通常是把过程本身用一个对象封装起来,传给拦截器链,比如:远程调用主过程为","扩展。","扩展功能插件。","扩展契约","扩展实现","扩展接口","扩展接口。框架如果让使用者或扩展者把","扩展接口仅用于系统集成,或","扩展接口职责尽可能单一,具有可组合性","扩展机制,参见:java.util.serviceloader,也就是扩展者在","扩展点之间的组合将关系由","扩展点兼容性测试","扩展点加载","扩展点加载扩展","扩展点发现机制加强而来。","扩展点基类与","扩展点方法调用会有url参数(或是参数有url成员)","扩展点本身的加载容器,可从不同容器加载扩展点。","扩展点特性","扩展点的","扩展点的代码:","扩展点的加载","扩展点自动包装","扩展点自动激活","扩展点自动装配","扩展点自适应","扩展点自适应机制,根据","扩展点进行暴露:","扩展点都会自动套上","扩展点配置","扩展点重构","扩展点,伪装成单个提供者引用返回。","扩展示例","扩展说明","扩展配置","扩展配置,比如:协议扩展,策略扩展等。","扩展配置,通常对配置的聚合要求比较高。因为产品需要发现第三方实现,将其加入产品内部。在","扫描","扫描到所有","扫描所有","技术兼容性测试","抛出异常的地方不用打印日志,由最终处理异常者决定打印日志的级别,吃掉异常必需打印日志。","拆分后,设计如下:","拉成分支","拦截实现。","拦截扩展","拦截服务","拦截点。","持有了实际的扩展点实现类。","按全url匹配取消注册。","按全url匹配取消订阅。","接口","接口中。","接口做不同的实现。","接口做渲染输出。","接口叫","接口方法做一个操作后,再调用extension的方法","接口混在了","接口类名的点分隔小写字串。即对于","接口类如下:","接口给扩展者控制输出方式,比如用","接口转换成业务接口。","接口,方法名通常是过去式的,比如","接口,有","接口,里面有一个通用的","描述配置,比如:服务接口描述,服务版本等。","提供配置时,要同时考虑开发人员,测试人员,配管人员,系统管理员。测试人员是不能修改代码的,而测试的环境很可能较为复杂,需要为测试人员留一些“后门”,可以在外围修改配置项。就像","提高代码的可测性","携带配置信息。","支持","支持backup=10.20.153.10备选注册中心集群地址。","支持file=registry.cache本地磁盘文件缓存。","支持session=60000会话超时或过期设置。","支持timeout=1000请求超时设置。","支持url上的username:password权限认证。","支持在","支持通过","改成:(链式过滤器)","改进了","数据序列化层:可复用的一些工具,扩展接口为","数据库上的活锁","数组,拷贝一次。然而,大部分场景都用不上","数组,然后传给业务方的","数量相对比较多,会对注册中心造成冲击。避免方法可以是","整体上按照分层结构进行分包,与分层的不同点在于:","整体设计","整体都隐含在","整理后,设计如下:","文档","断言日志输出。","新功能可以高版本中快速响应,并让应用能试用新功能。","新功能版本:高版本,比如","新功能的开发","新版本去掉了","新版本提供了与","方式管理插件。","方式,去掉过多的","方法。","方法。如提取","方法使用","方法时,判断如果有配置","方法时,协议需相应执行同","方法来判定其成员。即","方法生成","方法的","方法调用","方法,adapt","方法,和其它正常业务上的接口一样的调用方式,扩展接口也不用变,只是","方法,基于","方法,它主要是打开","方法,它通过","方法,将","方法,得到提供者引用。","方法,打开服务端口。","方法,是给使用者用来写业务逻辑的。然后,web","方法,由拦截器决定什么时候执行,同时,invoc","方法,返回提供者引用。","无条件自动激活","既然要开放,那","日志","日志。","日志中,尽量多的收集关键信息","日志信息包含环境信息","日志失去意义。再辅以人工定期查看","日志实时报警,warn","日志是发现问题、查看问题一个最常用的手段。日志质量往往被忽视,没有日志使用上的明确约定。重视","日志每周汇总发送通知。","日志表示可以自动恢复,打印","日志表示需要报警,打印","日志输出适配扩展点。","日志适配扩展","旧版本所有的超时时间,重试次数,负载均衡策略等都只能在服务消费方配置。但实际使用过程中发现,服务提供方比消费方更清楚,但这些配置项是在消费方执行时才用到的。新版本,就加入了在服务提供方也能配这些参数,通过注册中心传递到消费方,","旧版本通过约定在每个","时","时不能关闭连接。在实现中采用了引用计数的方案,但为了防范,在连接关闭时,重新建立了一个","时而","时,setwheelmak","时,注入的","时,累加所有","时,需要判断是否是回调,如果是回调,会从","是","是会话域,它持有调用过程中的变量,比如方法名,参数等。","是包装的最终的","是可以","是否使用注册中心,注册中心地址。","是否允许重试,重试次数。","是外围概念,所以","是实体域,它是","是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用","是服务域,它是","是核心层,也就是只要有","是根据调用方法参数(上面有调用哪个扩展点的信息)来选取一个真正的扩展点。","是给使用者用的,而","是给扩展者用的。在设计时,尽量把它们隔离开,而不要混在一起。也就是说,使用者是看不到扩展者写的实现的。","是隔离的。需要将流转换成","暴露了多个服务,jvm","暴露和引用的主功能入口,它负责","暴露服务","暴露服务时序","暴露服务的引用,用于取消暴露","暴露监听扩展","暴露远程服务:","更多设计原则参见:框架设计原则","最痴呆的问题,就是有多个版本的相同jar包,会出现新版本的","最终决定采用的是","最近一直担心","最近有点痴呆,因为解决了太多的痴呆问题。服务框架实施面超来超广,已有","最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里。","有了这样的约定,监管系统发现日志文件的中出现","有多个服务提供者的情况下,配置了","服务代理层:服务接口透明代理,生成服务的客户端","服务分组","服务域/实体域/会话域分离","服务域也就是行为域,它是组件的功能集,同时也负责实体域和会话域的生命周期管理,","服务安装包仓库","服务容器扩展,用于自定义加载内容。","服务提供方和服务消费方调用过程拦截,dubbo","服务提供方线程程实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。","服务提供者","服务提供者代码:","服务提供者暴露一个服务的详细过程","服务提供者选择逻辑","服务消息者从注册中心拿到提供者列表后,会保存提供者列表到内存和磁盘文件中。这样注册中心宕后消费者可以正常运转,甚至可以在注册中心宕机过程中重启消费者。消费者启动时,发现注册中心不可用,会读取保存在磁盘文件中提供者列表。重试逻辑保证注册中心恢复后,更新信息。","服务消费者代码:","服务消费者消费一个服务的详细过程","服务版本","服务的执行体","服务的本地代理","服务的消费者","服务的类型","服务路径","服务,通讯细节这一块由","未认领","本地部署代理","本章节的设计原则摘录自梁飞在","本身的","本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。","朱启恒","来决定","来决定使用哪个","来实现","来查看所有版本的标签。","来源:","构建","构建之前需要配置以下的","构建源代码","某个值,或","某个属性值,或查询一条数据库记录。命令是指有副作用的,也就是会修改状态,比如","某条数据库记录。如果你的方法即做了修改状态的操作,又做了查询返回,如果可能,将其拆成写读分离的两个方法,比如:user","查询条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。","标准的","标准的服务发现机制,即在","标签解析为","标识,以便保持兼容。","核心的一个扩展,设计如下:","根据@adaptive注解上声明的key的顺序,从url获致value,作为实际扩展点名。","格式使用。","格式,所有","框架使用一个都继承","框架将","框架或组件通常有两类客户,一个是使用者,一个是扩展者。api","框架有一个","框架设计","框架,它有一个","框架,那至少","框架,那请求的执行过程应该要有拦截接口,等等。没有哪个公用的框架可以","检查列表","检查所有可选配置","检查服务依赖各种资源的状态,此状态检查可同时用于","检查重复工具类:","检查重复的jar包","检查重复的配置文件","检查,它是独立于负载均衡之外的,不需要检查的是url参数关闭。","模块与分包","模块中,为","模块中,以便更大程度复用。","模块中,这两层是","模块分包","模块说明:","模型类,","模式,microkernel","模板输出的就继承","模板输出还是用","次结果都是一样的,比如","正常运行时的中间状态提示,打印","此项功能自动关闭连接重试功能,开启发送重试功能(即发送数据时如果连接已断开,尝试重新建立连接)","段判断是不是跨机房。另外一个例子,是","每个扩展点的实现者,往往都只是关心一件事,现在的扩展点,并没有完全分离。比如:failover,","每个版本要有","每个都是先配置一个","每次应用一出错,应用的开发或测试就会把出错信息发过来,询问原因,这时候我都会问一大堆套话,用的哪个版本呀?是生产环境还是开发测试环境?哪个注册中心呀?哪个项目中的?哪台机器呀?哪个服务?","每次线上环境一出问题,大家就慌了,通常最直接的办法回滚重启,以减少故障时间,这样现场就被破坏了,要想事后查问题就麻烦了,有些问题必须在线上的大压力下才会发生,线下测试环境很难重现,不太可能让开发或","比如","比如上面说的","比如,invok","比如,远程调用框架它的协议是可以替换的。如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持是可以细分为底层通讯,序列化,动态代理方式等等。如果将接口拆细,正交分解,会更便于扩展者复用已有逻辑,而只是替换某部分实现策略。当然这个分解的粒度需要把握好。","比如:(基类模板方法)","比如:一个","比如:远程调用框架,肯定少不了序列化功能,功能很简单,就是把流转成对象,对象转成流。但因有些地方可能会使用","没有","没有值则找","没有分离的反面例子,spi","没有完全分开,全由","没有被启动,spring","没有配置cache属性时,使用此配置","没有配置cluster时,使用此配置","没有配置dispatcher属性时,使用此配置","没有配置exchanger属性时,使用此配置","没有配置loadbalance时,使用此配置","没有配置networker属性时,使用此配置","没有配置page属性时,使用此配置","没有配置prototol属性时,使用此配置","没有配置proxy属性时,使用此配置","没有配置registry属性时,使用此配置","没有配置serialization时,使用此配置","没有配置status属性时,使用此配置","没有配置telnet属性时,使用此配置","没有配置threadpool时,使用此配置","没有配置transporter/server/client属性时,使用此配置","没有配置validation属性时,使用此配置","泛化式扩展指:将扩展点逐渐抽象,取所有功能并集,新加功能总是套入并扩充旧功能的概念。","注入其它扩展点。","注入扩展点之间的依赖,不要直接依赖","注入的依赖扩展点是一个","注册中心","注册中心会定时更新数据库一条记录的时间戳,这样集群中其它的注册中心感知它是存活。过期注册中心和它的相关数据","注册中心地址,不允许为空","注册中心层:封装服务地址的注册与发现,以服务","注册中心引用,总不返回空","注册中心扩展","注册中心推送路由规则","注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。","注册中心认为","注册中心路由规则推送:","注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","注册服务.","注册服务地址:","注册需处理契约:","注意:","注意:扩展点使用单一实例加载(请确保扩展实现的线程安全性),缓存在","注意:这里的配置文件是放在你自己的","注解使用如下:","注解在接口方法上提供。","注解在方法上说明。","流程","测试","测试一下网络,如果是跨机房调用,可能是防火墙阻挡,请联系","消息派发扩展","渗透在整个实现代码里,对于刚开始接触","源代码","源码、设计有兴趣的,或者有意愿加入","源码构建","满眼都是","点对点暴露和引用服务","点对点直连服务:","然后","然后将","版本","版本。","版本前有试用阶段","版本是稳定的!因为:","版本有","版本管理","版本(可以跨了多个版本)定期升级平摊风险(类似小步快跑)。经历过周期长的大项目的同学会有这样的经历,三方库版本长时间不升级,结果出了问题不得不升级到新版本(跨了多个版本)风险巨大。","版本,以","版本,只","版本,所以用户需要积极跟进升级到","版本,线上使用的版本,只会","版本:低版本,比如","特有功能,默认关闭。","特有功能,默认开启。","特殊值","特殊符号","状态","状态检查扩展","状态,表示要不要返回","环境配置,比如:连接数,超时等配置。","环境,都先将流转成","现在很多的逻辑,都是放在基类中实现,然后通过模板方法回调子类的实现,包括:local,","现在的设计是完全无侵入,也就是使用者只依赖于配置契约。经过多个版本的发展,为了满足各种需求场景,配置越来越多。为了保持兼容,配置只增不减,里面潜伏着各种风格,约定,规则。新版本也将配置做了一次调整,去掉了","现有","现有功能都当成了核心功能。上面的概念包含了","现有的设计:","生成一个","生成的自适应扩展点类如下:","用","用一个无效值代表关闭,n/a地址,0重试次数等。","用于当出现异常场景时,避免影响业务逻辑的正常调用.","用于避免开启无用的连接.","用例。","用到的原则和方法。","用户自定义","用户要配合的职责","用来确定使用哪个扩展点,这个信息通过的","用法","用请求参数作为","由一个插件生命周期管理容器,构成微核心,核心不包括任何功能,这样可以确保所有功能都能被替换,并且,框架作者能做到的功能,扩展者也一定要能做到,以保证平等对待第三方,所以,框架自身的功能也要用插件的方式实现,不能有任何硬编码。","由于","由于开发只会","由于自适应扩展点的上面的约定,extensionload","由协议实现,协议通常需要在此","由框架实现并传入,协议不需要关心。","界限设置","白文志","的","的。","的一个实现类:","的一部分,每个扩展点都应该有方便使用的基类支持。","的主过程上","的人,确实容易给搞混了。","的代码原封不动,再加一个","的以下问题:","的任务等待队列使用有限队列,避免资源耗尽。当任务等待队列饱和时,选择一个合适的饱和策略。这样保证平滑劣化。","的使用,提高","的信息浓度。日志过多、过于混乱,会导致有用的信息被淹没。","的值中,通过竖号分隔多个注册中心地址,用于表示多注册中心地址。","的协议为例,在协议的实现","的协议头,进行不同协议的服务暴露或引用。","的协议,只需在","的协议,通讯,序列化,注册中心,负载均策等扩展点,都有多种可选策略,以应对不同应用场景,而我们的测试用例很分散,当用户自己需要加一种新的实现时,总是不确定能否满足扩展点的完整契约。","的原因是","的参数。","的参数,却时而","的地方无视即可。","的场景扩展了一下,这样,不管是不是","的实现","的实现。","的实现中要注入哪个。","的实现,要用","的容器,以简单的","的容易程度,和测试的隔离性。至于测试的自动性,可重复性,非偶然性,无序性,完备性(全覆盖),轻量性(可快速执行),一般开发人员,加上","的层,remot","的层,不包含","的工厂方法。","的工程","的微核是","的所有功能点都可被用户自定义扩展所替换。","的所有功能,包括:proxy,","的执行过程,map","的扩展点","的扩展点加载从","的扩展点实现","的扩展点类对应的","的抽象,它也可以扩展","的支持,一个扩展点可以直接","的数据。","的新功能基本稳定后,进入","的方法签名为:","的时候,直接依赖","的服务注册中心","的标签,都统一用","的核心。其它,包括","的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起","的核心领域模型中:","的核心,在不需要集群也就是只有一个提供者时,可以只使用这两层完成","的格式为:","的格式为:","的格式为:dubbo://servic","的框架设计、扩展机制、编码规范、版本管理、构建等话题。","的测试,统一用","的源代码","的源代码和","的版本、服务提供者的","的版本等。","的现有开发人员能实现的需求有限,很多需求都被","的生命周期管理。","的生老病死,框架都自己做了,外部扩展或集成都无能为力。好的办法是让使用者或扩展者把","的目的是将多个","的简洁性。","的给予时间保证)","的缺省值为","的超时时间设置,每个服务,每个方法,都应该可以设置超时时间。但很多服务不关心超时,如果要求每个方法都配置,是不现实的。所以","的转化。接下来就是","的输出转交给","的过程。","的过程,上图中的红色部分。下面我们以","的适用面,不想强依赖","的长连接上,自动在","的项目越来越多,直接使用","的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。","监控中心扩展","监控层:rpc","监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。","目前服务注册中心使用了数据库来保存服务提供者和消费者的信息。注册中心集群不同注册中心也通过数据库来之间同步数据,以感知其它注册中心上提供者。注册中心会内存中保证一份提供者和消费者数据,数据库不可用时,注册中心独立对外正常运转,只是拿不到其它注册中心的数据。当数据库恢复时,重试逻辑会内存中修改的数据写回数据库,并拿到数据库中新数据。","目录下就不用配了,如果你想换个目录,就配置下。","目录下放置与接口同名的文本文件,内容为接口实现类名,多个实现类名用换行符分隔。比如,需要扩展","直扫某个指定名称的配置,或者启动时允许指定配置路径。做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行,否则当使用者需要将你的框架与另一个框架集成时就会带来很多不必要的麻烦。","直接使远程服务调用绕过注册中心,进行点对点测试。还有一种情况,开发人员增加配置时,都会按线上的部署情况做配置,如:","直接暴露服务:","直连引用服务:","相对出问题才升级到","看了都快疯掉,因是线上环境不好调试,而且有些场景不是每次都能重现。异常最基本要带有上下文信息,包括操作者,操作目标,原因等,最好的异常信息,应给出解决方案,比如上面可以给出:\"从","确定要调用哪个扩展点实现。url","示例:","示例:有两个为扩展点","稳定性的提高","端便可反向调用到","端可以对同一个","端暴露一个服务(实现方法参数上声明的接口a),provid","端用于处理请求的","端的接口实例。","第一步,微核心,插件式,平等对待第三方","第三步,全管道式设计,框架自身逻辑,均使用截面拦截实现","第二步,每个扩展点只封装一个变化因子,最大化复用","第五步,分层,组合式扩展,而不是泛化式扩展","第六步,整理,梳理关系","第四步,最少概念,一致性概念模型","等","等。服务域的对象通常会比较重,而且是线程安全的,并以单一实例服务于所有调用。","等。这样有它的优势,就是基于约定,简化了用户对配置加载过程的干预。但同样有它的缺点,当","等于","等它们在调用","等工具的辅助基本都能做到,也能理解它的好处,只是工作量问题。这里要特别强调的是测试用例的单一性(只测目标类本身)和隔离性(不传染失败)。现在的测试代码,过于强调完备性,大量重复交叉测试,看起来没啥坏处,但测试代码越多,维护代价越高。经常出现的问题是,修改一行代码或加一个判断条件,引起","等方式管理插件生命周期。考虑","等第三方协议都已生成了接口代理,只需将将接口代理转成","等等。不要因为外部的请求、数据不受限的而崩溃。","等等。这个核心领域模型及其组成部分称为实体域,它代表着我们要操作的目标本身。实体域通常是线程安全的,不管是通过不变类,同步状态,或复制的方式。","等等,上面甚至可以根据","等等,可以全部拆分使用","等结构。如果有复杂的生命周期管理,可能需要","等配置。有时候扩展会通过注册接口的方式提供。","等,","等,可以同时加载多个实现,此时,可以用自动激活来简化配置,如:","等,这类配置可以考虑","策略","策略默认开启了连接的","类。","类。extensionload","类加载失败,这个失败原因被吃掉了,和","类包装,","类可以把所有扩展点公共逻辑移至","类可以有多个,也可以根据需要新增。","类同样实现了扩展点接口,但是","类和通用模型。","类型的开关,再配置一个值。","类拿到对外提供服务的实际类","类的","类的实例,wrapper","类都命名为","类,但上面两种是最重要的。","类,将所有","类,而且和jvm加载顺序有关,问题带有偶然性,误导性,遇到这种莫名其妙的问题,最头疼,所以,第一条,先把它防住,在每个","类,调用了旧版本的","累啊,最主要的是,有些开发或测试人员根本分不清,没办法,只好提供上门服务,浪费的时间可不是浮云,所以,日志中最好把需要的环境信息一并打进去,最好给日志输出做个包装,统一处理掉,免得忘了。包装logger接口如:","约定","约定:","级别信息,以评估系统的“亚健康”程度。","线程池(exectorservice)的大小和饱和策略","线程池扩展","线程派发模型","组合式扩展指:将扩展点正交分解,取所有功能交集,新加功能总是基于旧功能之上实现。","组网扩展","组装成链,在链的最后一节调用真实的引用。","组装集合,在暴露和引用前后,进行回调。","经过一个试用阶段保持稳定。","给定所有的扩展点上调用都有","缓存扩展","编码约定","编译器扩展","缩小可变域和尽量","网络传输层:抽象","网络传输扩展","网络通讯,比如通过共享文件,ipc","罗立树","而","而对于描述配置,因为要参与业务逻辑,通常会嵌到应用的生命周期管理中。现在使用","而底层,给“地址”加了一个缺省端口号,导致不加端口号的“地址”和加了缺省端口的“地址”并没有使用相同的缓存。","而描述配置,通常信息比较多,甚至有层次关系,用","脚本之前调用","脚本时,会报不支持","自动加载","自动包装扩展点的","自己实现。","自带的","自身的功能也是通过扩展点实现的,也就是","自适应扩展点","获取注册中心:","获取版本号工具类:","获取脚本类型的名称,但如果","获取路由器:","虽然有点麻烦,但是这样做保证日志信息浓度,让监控更有效。","行为的不同阶段,完全可以抽象掉,统一为","表示。因为","表示不可用,size","表示可以恢复的问题,无需人工介入。","表示正常信息或完全不影响运行。","表示需要人工介入问题。","表示黑名单,这就是一个雷,下一个修改者,包括你自己,都不会记得有这样的约定,可能后面为了改某个其它","要有效利用这个工具要注意:","要求","要注入依赖扩展点时,如何决定要注入依赖扩展点的哪个实现。在这个示例中,即是在多个wheelmak","规范。","解析出的","解析服务","解析配置生成配置类","计划完成时间","订阅时的第一次通知,必须是一个服务的所有类型数据的全量通知。","订阅服务.","订阅服务地址:","订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.barservice?version=1.0.0&application=kylin","订阅需处理契约:","认领者","让直接升级。(这个称为“夕阳条款”)","讲一遍逻辑","讲述一遍实现。","设置上限。executorservic","设计原则","设计实现的健壮性","设计或实现不优雅的地方。","访问,用于人工干预。","试用阶段。找足够多的应用试用","语义。","调用。","调用其对应的","调用参数","调用拦截扩展","调用次数和调用时间监控,以","调用的通讯基础。","调用超时","调用链","调用,以","调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。","调用,然后在","调研","谈谈扩充式扩展与增量式扩展","负责服务的注册与发现。","负责服务调用次和调用时间的监控。","负载均衡扩展","贡献","资源是有限的,cpu、内存、io","资源调度器","路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以","路由扩展","转为","转成","转成接口,或将接口实现转成","转换","转换为业务接口。","转换为客户端需要的接口(如:helloworld)。","转换到","输出的就继承","输出等。如果这个","达到饱和时,说明已经达到服务提供方的负荷上限,要在饱和策略的操作中日志记录这个问题,以发出监控警报。记得注意不要重复多次记录哦。(注意,缺省的饱和策略不会有这些附加的操作。)根据警报的频率,已经决定扩容调整等等,避免系统问题被忽略。","过一遍","过期,删除","过程要有拦截接口;如果你要写一个","过程;同理,sql","返回扩展点时,包装在真正的扩展点实现外。即从","返回版本号,如果为空返回缺省版本号","返回的","返回的方法是命令。查询方法通常是幂等性的,无副作用的,也就是不改变任何状态,调","这两种典型协议的实现来进行说明:","这个是契约式设计的一部分,尽量遵守有返回值的方法是查询方法,void","这个问题在下面一点","这些","这是我最不喜欢看到的异常,尤其在核心框架中,我更愿看到信息详细的参数不合法异常。这也是一个健状的程序开发人员,在写每一行代码都应在潜意识中防止的异常。基本上要能确保一次写完的代码,在不测试的情况,都不会出现这两个异常才算合格。","这样依赖的扩展点也可以从url拿到配置信息,所有的扩展点自己定好配置的key后,配置信息从url上从最外层传入。url在配置传递上即是一条总线。","这样操作减少后,保证数据库可以冷却(cool","这篇文档的目标读者是对","这里先要讲一个事件和上面拦截器的区别,拦截器是干预过程的,它是过程的一部分,是基于过程行为的,而事件是基于状态数据的,任何行为改变的相同状态,对事件应该是一致的。事件通常是事后通知,是一个","这里列出一些","这里带来另一个问题,extensionload","这里的可测性主要指","这里的可靠是狭义的指是否会抛出异常或引起状态不一致,比如,写入一个线程安全的","这里记录的是","这里讲的异常防御,指的是对非必须途径上的代码进行最大限度的容忍,包括程序上的","这里面虽然有部分扩展接口,但并不能很好的协作,而且扩展点的加载和配置都没有统一处理,所以下面对它进行重构。","进度","进程间通讯等。","进行序列化。为了适应","进行扩展。","进行解析,基于一对一属性映射,将","进行选择,如果选择的","进行配对,采用扩展式扩展,自然想到,无状态消息其实是一个没有","远程服务的url地址","远程调用层:封装","远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。","远程调用细节","远程通讯模块:相当于","远程通讯的服务器及客户端传输实现。","远程通讯细节","远端","连接注册中心.","连接注册中心需处理契约:","选的是第二种。相似的还有,超时时间,重试时间,定时器间隔时间。如果一个单位是秒,另一个单位是毫秒(c3p0的配置项就是这样),配置人员会疯掉。","选项,","通常微核心都会采用","通常环境配置,用","通知服务地址:","通知者(即注册中心实现)需保证通知的顺序,比如:单线程推送,队列串行化,带版本对比。","通知需处理契约:","通过","通过以下命令以构建","通过以下的这个命令签出最新的项目源码","通过扫描扩展点实现类的所有","通过注册中心引用服务","通过注册中心暴露服务","通道信息派发器,用于指定线程池模型。","逻辑分离。","遵循以下的规范:","都不会用上,remot","都不核心,而是","都没有","配置。将想到的一些记在这,备忘。","配置一对一的配置类,如:serviceconfig","配置一致性","配置也存在“重复代码”,也存在“泛化与精化”的问题。比如:dubbo","配置会比较方便,因为树结构的配置表现力更强。如果非常复杂,也可以考自定义","配置会比较方便,因为都是一些离散的简单值,用","配置分类","配置加载","配置加载。用户感觉非常不便,所以在新版本中进行了合并,统一放到","配置加载,一部分从","配置加载,也增加了配置的灵活性。","配置可以减少配置的学习成本。","配置向后兼容","配置和","配置对象属性首字母小写,多个单词用驼峰命名","配置层:对外配置接口,以","配置属性全部用小写,多个单词用\"","配置总会隐含一些风格或潜规则,应尽可能保持其一致性。比如:很多功能都有开关,然后有一个配置值:","配置文件加载错,也是经常碰到的问题。用户通常会和你说:“我配置的很正确啊,不信我发给你看下,但就是报错”。然后查一圈下来,原来他发过来的配置根本没加载,平台很多产品都会在","配置格式","配置模块中的配置","配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。比如:","配置模块:是","配置的可编程性是非常必要的,不管你以何种方式加载配置文件,都应该提供一个编程的配置方式,允许用户不使用配置文件,直接用代码完成配置过程。因为一个产品,尤其是组件类产品,通常需要和其它产品协作使用,当用户集成你的产品时,可能需要适配配置方式。","配置的比较普遍,而且","配置的缺省值,通常是设置一个常规环境的合理值,这样可以减少用户的配置量。通常建议以线上环境为参考值,开发环境可以通过修改配置适应。缺省值的设置,最好在最外层的配置加载就做处理。程序底层如果发现配置不正确,就应该直接报错,容错在最外层做。如果在程序底层使用时,发现配置值不合理,就填一个缺省值,很容易掩盖表面问题,而引发更深层次的问题。并且配置的中间传递层,很可能并不知道底层使用了一个缺省值,一些中间的检测条件就可能失效。dubbo","配置继承","配置缺省值","配置覆盖","配置设计","配置进行扩展与集成,新版本改成用","配置,spring","配置,支持","配置,比如:log4j.properties,velocity.properties等。产品在初始化时,自动从","采用","采用了方法超时继承服务超时,服务超时再继承缺省超时,没配置时,一层层向上查找。","采用标准格式:protocol://username:password@host:port/path?key=value&key=valu","释放资源。","里加一个","里有一个","里还有一些其他的","重要的状态的变更发送事件并留出监听接口","重试","重试延迟策略","重连时随机延时","重连注册中心","长连接进行数据传输,已达到减少服务端连接数的目的.","长连接,当有数据请求时在做连接初始化。","闾刚","防御性容错","防止空指针和下标越界","防痴呆设计","降低修改时的误解性,不埋雷","随着服务化的推广,网站对dubbo服务框架的需求逐渐增多,dubbo","隔离时,可能找不到配置,并且,当用户希望将配置放到统一的目录时,不太方便。","集合容量","集群扩展","集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡,","需求,把原来非","需要伙伴检查","页面。","页面扩展","项目结构:","领域模型","领域模型中非常重要的一个概念,很多设计思路都是向它靠拢。这就使得","首先","首先查找manifest.mf规范中的版本号","首先,配置的用途是有多种的,大致可以分为:","首先,需要在","驱动等,都是采用这种方式。参见:serviceprovid","验证令牌","验证扩展","高","高可用组件要容忍其依赖组件的失败。","魔鬼在细节","默认在内置",",",",则",",并且属性也一对一,这样有利于文件配置与编程配置的一致性理解,减少学习成本。",",所以这个地方,dubbo",",表示剔除。比如:filter=\""],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"Introduction","keywords":"","body":"这篇文档的目标读者是对 dubbo 源码、设计有兴趣的,或者有意愿加入 dubbo 开发的人群。主要涵盖了 dubbo 的框架设计、扩展机制、编码规范、版本管理、构建等话题。\n"},"build.html":{"url":"build.html","title":"1 源码构建","keywords":"","body":"源码构建\n代码签出\n通过以下的这个命令签出最新的项目源码 1:\ngit clone https://github.com/apache/incubator-dubbo.git dubbo\n\n分支\n我们使用 master 作为主干版本的开发,使用分支作为维护版本。可以通过 https://github.com/apache/incubator-dubbo/tags 来查看所有版本的标签。\n构建\nDubbo 使用 maven 作为构建工具。\n要求\n\nJava 1.5 以上的版本\nMaven 2.2.1 或者以上的版本   \n\n构建之前需要配置以下的 MAVEN_OPTS\nexport MAVEN_OPTS=-Xmx1024m -XX:MaxPermSize=512m\n\n使用以下命令做一次构建\nmvn clean install\n\n可以通过以下的构建命令来跳过单元测试\nmvn install -Dmaven.test.skip\n\n构建源代码 jar 包\n通过以下命令以构建 Dubbo 的源代码 jar 包,方便用来调试 Dubbo 源代码\nmvn clean source:jar install -Dmaven.test.skip\n\nIDE 支持\n使用以下命令来生成 IDE 的工程\nIntellij Idea\nmvn idea:idea\n\neclipse\nmvn eclipse:eclipse\n\n在 eclipse 中导入\n首先,需要在 eclipse 中配置 maven 仓库。通过 Preferences -> Java -> Build Path -> Classpath 定义 M2_REPO 的 classpath 变量指向本地的 maven 仓库。 2\n也可以通过以下的 maven 命令配置:\nmvn eclipse:configure-workspace -Declipse.workspace=/path/to/the/workspace/\n\n\n1. 也可以直接在 https://github.com/apache/incubator-dubbo 上浏览源代码 ↩\n\n\n2. UNIX 下的路径是 ${HOME}/.m2/repository, Windows 下的路径是 C:\\Documents and Settings\\.m2\\repository ↩\n\n"},"design.html":{"url":"design.html","title":"2 框架设计","keywords":"","body":"框架设计\n整体设计\n\n图例说明:\n\n图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。\n图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。\n图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。\n图中蓝色虚线为初始化过程,即启动时组装链,红色实线为方法调用过程,即运行时调时链,紫色三角箭头为继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法。\n\n各层说明\n\nconfig 配置层:对外配置接口,以 ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类\nproxy 服务代理层:服务接口透明代理,生成服务的客户端 Stub 和服务器端 Skeleton, 以 ServiceProxy 为中心,扩展接口为 ProxyFactory\nregistry 注册中心层:封装服务地址的注册与发现,以服务 URL 为中心,扩展接口为 RegistryFactory, Registry, RegistryService\ncluster 路由层:封装多个提供者的路由及负载均衡,并桥接注册中心,以 Invoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalance\nmonitor 监控层:RPC 调用次数和调用时间监控,以 Statistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorService\nprotocol 远程调用层:封装 RPC 调用,以 Invocation, Result 为中心,扩展接口为 Protocol, Invoker, Exporter\nexchange 信息交换层:封装请求响应模式,同步转异步,以 Request, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServer\ntransport 网络传输层:抽象 mina 和 netty 为统一接口,以 Message 为中心,扩展接口为 Channel, Transporter, Client, Server, Codec\nserialize 数据序列化层:可复用的一些工具,扩展接口为 Serialization, ObjectInput, ObjectOutput, ThreadPool\n\n关系说明\n\n在 RPC 中,Protocol 是核心层,也就是只要有 Protocol + Invoker + Exporter 就可以完成非透明的 RPC 调用,然后在 Invoker 的主过程上 Filter 拦截点。\n图中的 Consumer 和 Provider 是抽象概念,只是想让看图者更直观的了解哪些类分属于客户端与服务器端,不用 Client 和 Server 的原因是 Dubbo 在很多场景下都使用 Provider, Consumer, Registry, Monitor 划分逻辑拓普节点,保持统一概念。\n而 Cluster 是外围概念,所以 Cluster 的目的是将多个 Invoker 伪装成一个 Invoker,这样其它人只要关注 Protocol 层 Invoker 即可,加上 Cluster 或者去掉 Cluster 对其它层都不会造成影响,因为只有一个提供者时,是不需要 Cluster 的。\nProxy 层封装了所有接口的透明化代理,而在其它层都以 Invoker 为中心,只有到了暴露给用户使用时,才用 Proxy 将 Invoker 转成接口,或将接口实现转成 Invoker,也就是去掉 Proxy 层 RPC 是可以 Run 的,只是不那么透明,不那么看起来像调本地服务一样调远程服务。\n而 Remoting 实现是 Dubbo 协议的实现,如果你选择 RMI 协议,整个 Remoting 都不会用上,Remoting 内部再划为 Transport 传输层和 Exchange 信息交换层,Transport 层只负责单向消息传输,是对 Mina, Netty, Grizzly 的抽象,它也可以扩展 UDP 传输,而 Exchange 层是在传输层之上封装了 Request-Response 语义。\nRegistry 和 Monitor 实际上不算一层,而是一个独立的节点,只是为了全局概览,用层的方式画在一起。\n\n模块分包\n\n模块说明:\n\ndubbo-common 公共逻辑模块:包括 Util 类和通用模型。\ndubbo-remoting 远程通讯模块:相当于 Dubbo 协议的实现,如果 RPC 用 RMI协议则不需要使用此包。\ndubbo-rpc 远程调用模块:抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。\ndubbo-cluster 集群模块:将多个服务提供方伪装为一个提供方,包括:负载均衡, 容错,路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。\ndubbo-registry 注册中心模块:基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。\ndubbo-monitor 监控模块:统计服务调用次数,调用时间的,调用链跟踪的服务。\ndubbo-config 配置模块:是 Dubbo 对外的 API,用户通过 Config 使用D ubbo,隐藏 Dubbo 所有细节。\ndubbo-container 容器模块:是一个 Standlone 的容器,以简单的 Main 加载 Spring 启动,因为服务通常不需要 Tomcat/JBoss 等 Web 容器的特性,没必要用 Web 容器去加载服务。\n\n整体上按照分层结构进行分包,与分层的不同点在于:\n\ncontainer 为服务容器,用于部署运行服务,没有在层中画出。\nprotocol 层和 proxy 层都放在 rpc 模块中,这两层是 rpc 的核心,在不需要集群也就是只有一个提供者时,可以只使用这两层完成 rpc 调用。\ntransport 层和 exchange 层都放在 remoting 模块中,为 rpc 调用的通讯基础。\nserialize 层放在 common 模块中,以便更大程度复用。\n\n依赖关系\n\n图例说明:\n\n图中小方块 Protocol, Cluster, Proxy, Service, Container, Registry, Monitor 代表层或模块,蓝色的表示与业务有交互,绿色的表示只对 Dubbo 内部交互。\n图中背景方块 Consumer, Provider, Registry, Monitor 代表部署逻辑拓扑节点。\n图中蓝色虚线为初始化时调用,红色虚线为运行时异步调用,红色实线为运行时同步调用。\n图中只包含 RPC 的层,不包含 Remoting 的层,Remoting 整体都隐含在 Protocol 中。\n\n调用链\n展开总设计图的红色调用链,如下:\n\n暴露服务时序\n展开总设计图左边服务提供方暴露服务的蓝色初始化链,时序图如下:\n\n引用服务时序\n展开总设计图右边服务消费方引用服务的蓝色初始化链,时序图如下:\n\n领域模型\n在 Dubbo 的核心领域模型中:\n\nProtocol 是服务域,它是 Invoker 暴露和引用的主功能入口,它负责 Invoker 的生命周期管理。\nInvoker 是实体域,它是 Dubbo 的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起 invoke 调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。\nInvocation 是会话域,它持有调用过程中的变量,比如方法名,参数等。\n\n基本设计原则\n\n采用 Microkernel + Plugin 模式,Microkernel 只负责组装 Plugin,Dubbo 自身的功能也是通过扩展点实现的,也就是 Dubbo 的所有功能点都可被用户自定义扩展所替换。\n采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息。\n\n更多设计原则参见:框架设计原则\n"},"SPI.html":{"url":"SPI.html","title":"3 扩展点加载","keywords":"","body":"扩展点加载\n扩展点配置\n来源:\nDubbo 的扩展点加载从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现机制加强而来。\nDubbo 改进了 JDK 标准的 SPI 的以下问题:\n\nJDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。\n如果扩展点加载失败,连扩展点的名称都拿不到了。比如:JDK 标准的 ScriptEngine,通过 getName() 获取脚本类型的名称,但如果 RubyScriptEngine 因为所依赖的 jruby.jar 不存在,导致 RubyScriptEngine 类加载失败,这个失败原因被吃掉了,和 ruby 对应不起来,当用户执行 ruby  脚本时,会报不支持 ruby,而不是真正失败的原因。\n增加了对扩展点 IoC 和 AOP 的支持,一个扩展点可以直接 setter 注入其它扩展点。\n\n约定:\n在扩展类的 jar 包内 1,放置扩展点配置文件 META-INF/dubbo/接口全限定名,内容为:配置名=扩展实现类全限定名,多个实现类用换行符分隔。\n示例:\n以扩展 Dubbo 的协议为例,在协议的实现 jar 包内放置文本文件:META-INF/dubbo/com.alibaba.dubbo.rpc.Protocol,内容为:\nxxx=com.alibaba.xxx.XxxProtocol\n\n实现类内容 2:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implemenets Protocol { \n    // ...\n}\n\n配置模块中的配置\nDubbo 配置模块中,扩展点均有对应配置属性或标签,通过配置指定使用哪个扩展实现。比如:\n\n\n扩展点特性\n扩展点自动包装\n自动包装扩展点的 Wrapper 类。ExtensionLoader 在加载扩展点时,如果加载到的扩展点有拷贝构造函数,则判定为扩展点 Wrapper 类。\nWrapper类内容:\npackage com.alibaba.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocolWrapper implemenets Protocol {\n    Protocol impl;\n\n    public XxxProtocol(Protocol protocol) { impl = protocol; }\n\n    // 接口方法做一个操作后,再调用extension的方法\n    public void refer() {\n        //... 一些操作\n        impl.refer();\n        // ... 一些操作\n    }\n\n    // ...\n}\n\nWrapper 类同样实现了扩展点接口,但是 Wrapper 不是扩展点的真正实现。它的用途主要是用于从 ExtensionLoader 返回扩展点时,包装在真正的扩展点实现外。即从 ExtensionLoader 中返回的实际上是 Wrapper 类的实例,Wrapper 持有了实际的扩展点实现类。\n扩展点的 Wrapper 类可以有多个,也可以根据需要新增。\n通过 Wrapper 类可以把所有扩展点公共逻辑移至 Wrapper 中。新加的 Wrapper 在所有的扩展点上添加了逻辑,有些类似 AOP,即 Wrapper 代理了扩展点。\n扩展点自动装配\n加载扩展点时,自动注入依赖的扩展点。加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,ExtensionLoader 在会自动注入依赖的扩展点。ExtensionLoader 通过扫描扩展点实现类的所有 setter 方法来判定其成员。即 ExtensionLoader 会执行扩展点的拼装操作。\n示例:有两个为扩展点 CarMaker(造车者)、WheelMaker (造轮者)\n接口类如下:\npublic interface CarMaker {\n    Car makeCar();\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel();\n}\n\nCarMaker 的一个实现类:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar() {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel();\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\nExtensionLoader 加载 CarMaker 的扩展点实现 RaceCar 时,setWheelMaker 方法的 WheelMaker 也是扩展点则会注入 WheelMaker 的实现。\n这里带来另一个问题,ExtensionLoader 要注入依赖扩展点时,如何决定要注入依赖扩展点的哪个实现。在这个示例中,即是在多个WheelMaker 的实现中要注入哪个。\n这个问题在下面一点 扩展点自适应 中说明。\n扩展点自适应\nExtensionLoader 注入的依赖扩展点是一个 Adaptive 实例,直到扩展点方法执行时才决定调用是一个扩展点实现。\nDubbo 使用 URL 对象(包含了Key-Value)传递配置信息。\n扩展点方法调用会有URL参数(或是参数有URL成员)\n这样依赖的扩展点也可以从URL拿到配置信息,所有的扩展点自己定好配置的Key后,配置信息从URL上从最外层传入。URL在配置传递上即是一条总线。\n示例:有两个为扩展点 CarMaker、WheelMaker\n接口类如下:\npublic interface CarMaker {\n    Car makeCar(URL url);\n}\n\npublic interface WheelMaker {\n    Wheel makeWheel(URL url);\n}\n\nCarMaker 的一个实现类:\npublic class RaceCarMaker implemenets CarMaker {\n    WheelMaker wheelMaker;\n\n    public setWheelMaker(WheelMaker wheelMaker) {\n        this.wheelMaker = wheelMaker;\n    }\n\n    public Car makeCar(URL url) {\n        // ...\n        Wheel wheel = wheelMaker.makeWheel(url);\n        // ...\n        return new RaceCar(wheel, ...);\n    }\n}\n\n当上面执行\n// ...\nWheel wheel = wheelMaker.makeWheel(url);\n// ...\n\n时,注入的 Adaptive 实例可以提取约定 Key 来决定使用哪个 WheelMaker 实现来调用对应实现的真正的 makeWheel 方法。如提取 wheel.type, key 即 url.get(\"wheel.type\") 来决定 WheelMake 实现。Adaptive 实例的逻辑是固定,指定提取的 URL 的 Key,即可以代理真正的实现类上,可以动态生成。\n在 Dubbo 的 ExtensionLoader 的扩展点类对应的 Adaptive 实现是在加载扩展点里动态生成。指定提取的 URL 的 Key 通过 @Adaptive 注解在接口方法上提供。\n下面是 Dubbo 的 Transporter 扩展点的代码:\npublic interface Transporter {\n    @Adaptive({\"server\", \"transport\"})\n    Server bind(URL url, ChannelHandler handler) throws RemotingException;\n\n    @Adaptive({\"client\", \"transport\"})\n    Client connect(URL url, ChannelHandler handler) throws RemotingException;\n}\n\n对于 bind() 方法,Adaptive 实现先查找 server key,如果该 Key 没有值则找 transport key 值,来决定代理到哪个实际扩展点。\n扩展点自动激活\n对于集合类扩展点,比如:Filter, InvokerListener, ExportListener, TelnetHandler, StatusChecker 等,可以同时加载多个实现,此时,可以用自动激活来简化配置,如:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate // 无条件自动激活\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n或:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(\"xxx\") // 当配置了xxx参数,并且参数为有效值时激活,比如配了cache=\"lru\",自动激活CacheFilter。\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n或:\nimport com.alibaba.dubbo.common.extension.Activate;\nimport com.alibaba.dubbo.rpc.Filter;\n\n@Activate(group = \"provider\", value = \"xxx\") // 只对提供方激活,group可选\"provider\"或\"consumer\"\npublic class XxxFilter implements Filter {\n    // ...\n}\n\n\n1. 注意:这里的配置文件是放在你自己的 jar 包内,不是 dubbo 本身的 jar 包内,Dubbo 会全 ClassPath 扫描所有 jar 包内同名的这个文件,然后进行合并 ↩\n\n\n2. 注意:扩展点使用单一实例加载(请确保扩展实现的线程安全性),缓存在 ExtensionLoader 中 ↩\n\n"},"implementation.html":{"url":"implementation.html","title":"4 实现细节","keywords":"","body":"实现细节\n初始化过程细节\n解析服务\n基于 dubbo.jar 内的 META-INF/spring.handlers 配置,Spring 在遇到 dubbo 名称空间时,会回调 DubboNamespaceHandler。\n所有 dubbo 的标签,都统一用 DubboBeanDefinitionParser 进行解析,基于一对一属性映射,将 XML 标签解析为 Bean 对象。\n在 ServiceConfig.export() 或 ReferenceConfig.get() 初始化时,将 Bean 对象转换 URL 格式,所有 Bean 属性转成 URL 的参数。\n然后将 URL 传给 协议扩展点,基于扩展点的 扩展点自适应机制,根据 URL 的协议头,进行不同协议的服务暴露或引用。\n暴露服务\n1. 只暴露服务端口:\n在没有注册中心,直接暴露提供者的情况下 1,ServiceConfig 解析出的 URL 的格式为:\ndubbo://service-host/com.foo.FooService?version=1.0.0。\n基于扩展点自适应机制,通过 URL 的 dubbo:// 协议头识别,直接调用 DubboProtocol的 export() 方法,打开服务端口。\n2. 向注册中心暴露服务:\n在有注册中心,需要注册提供者地址的情况下 2,ServiceConfig 解析出的 URL 的格式为: registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(\"dubbo://service-host/com.foo.FooService?version=1.0.0\"),\n基于扩展点自适应机制,通过 URL 的 registry:// 协议头识别,就会调用  RegistryProtocol 的 export() 方法,将 export 参数中的提供者 URL,先注册到注册中心。\n再重新传给 Protocol 扩展点进行暴露: dubbo://service-host/com.foo.FooService?version=1.0.0,然后基于扩展点自适应机制,通过提供者 URL 的 dubbo:// 协议头识别,就会调用 DubboProtocol 的 export() 方法,打开服务端口。\n引用服务\n1. 直连引用服务:\n在没有注册中心,直连提供者的情况下 3,ReferenceConfig 解析出的 URL 的格式为:dubbo://service-host/com.foo.FooService?version=1.0.0。\n基于扩展点自适应机制,通过 URL 的 dubbo:// 协议头识别,直接调用 DubboProtocol 的 refer() 方法,返回提供者引用。\n2. 从注册中心发现引用服务:\n在有注册中心,通过注册中心发现提供者地址的情况下 4,ReferenceConfig 解析出的 URL 的格式为:\nregistry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode(\"consumer://consumer-host/com.foo.FooService?version=1.0.0\")。\n基于扩展点自适应机制,通过 URL 的 registry:// 协议头识别,就会调用 RegistryProtocol 的 refer() 方法,基于 refer 参数中的条件,查询提供者 URL,如:\ndubbo://service-host/com.foo.FooService?version=1.0.0。\n基于扩展点自适应机制,通过提供者 URL 的 dubbo:// 协议头识别,就会调用 DubboProtocol 的 refer() 方法,得到提供者引用。\n然后 RegistryProtocol 将多个提供者引用,通过 Cluster 扩展点,伪装成单个提供者引用返回。\n拦截服务\n基于扩展点自适应机制,所有的 Protocol 扩展点都会自动套上 Wrapper 类。\n基于 ProtocolFilterWrapper 类,将所有 Filter 组装成链,在链的最后一节调用真实的引用。\n基于 ProtocolListenerWrapper 类,将所有 InvokerListener 和 ExporterListener 组装集合,在暴露和引用前后,进行回调。\n包括监控在内,所有附加功能,全部通过 Filter 拦截实现。\n远程调用细节\n服务提供者暴露一个服务的详细过程\n\n上图是服务提供者暴露服务的主过程:\n首先 ServiceConfig 类拿到对外提供服务的实际类 ref(如:HelloWorldImpl),然后通过 ProxyFactory 类的 getInvoker 方法使用 ref 生成一个 AbstractProxyInvoker 实例,到这一步就完成具体服务到 Invoker 的转化。接下来就是 Invoker 转换到 Exporter 的过程。\nDubbo 处理服务暴露的关键就在 Invoker 转换到 Exporter 的过程,上图中的红色部分。下面我们以 Dubbo 和 RMI 这两种典型协议的实现来进行说明:\nDubbo 的实现\nDubbo 协议的 Invoker 转为 Exporter 发生在 DubboProtocol 类的 export 方法,它主要是打开 socket 侦听服务,并接收客户端发来的各种请求,通讯细节由 Dubbo 自己实现。\nRMI 的实现\nRMI 协议的 Invoker 转为 Exporter 发生在 RmiProtocol类的 export 方法,它通过 Spring 或 Dubbo 或 JDK 来实现 RMI 服务,通讯细节这一块由 JDK 底层来实现,这就省了不少工作量。\n服务消费者消费一个服务的详细过程\n\n上图是服务消费的主过程:\n首先 ReferenceConfig 类的 init 方法调用 Protocol 的 refer 方法生成 Invoker 实例(如上图中的红色部分),这是服务消费的关键。接下来把 Invoker 转换为客户端需要的接口(如:HelloWorld)。\n关于每种协议如 RMI/Dubbo/Web service 等它们在调用 refer 方法生成 Invoker 实例的细节和上一章节所描述的类似。\n满眼都是 Invoker\n由于 Invoker 是 Dubbo 领域模型中非常重要的一个概念,很多设计思路都是向它靠拢。这就使得 Invoker 渗透在整个实现代码里,对于刚开始接触 Dubbo 的人,确实容易给搞混了。\n下面我们用一个精简的图来说明最重要的两种 Invoker:服务提供 Invoker 和服务消费 Invoker:\n\n为了更好的解释上面这张图,我们结合服务消费和提供者的代码示例来进行说明:\n服务消费者代码:\npublic class DemoClientAction {\n\n    private DemoService demoService;\n\n    public void setDemoService(DemoService demoService) {\n        this.demoService = demoService;\n    }\n\n    public void start() {\n        String hello = demoService.sayHello(\"world\" + i);\n    }\n}\n\n上面代码中的 DemoService 就是上图中服务消费端的 proxy,用户代码通过这个 proxy 调用其对应的 Invoker 5,而该 Invoker 实现了真正的远程服务调用。\n服务提供者代码:\npublic class DemoServiceImpl implements DemoService {\n\n    public String sayHello(String name) throws RemoteException {\n        return \"Hello \" + name;\n    }\n}\n\n上面这个类会被封装成为一个 AbstractProxyInvoker 实例,并新生成一个 Exporter 实例。这样当网络通讯层收到一个请求后,会找到对应的 Exporter 实例,并调用它所对应的 AbstractProxyInvoker 实例,从而真正调用了服务提供者的代码。Dubbo 里还有一些其他的 Invoker 类,但上面两种是最重要的。\n远程通讯细节\n协议头约定\n\n线程派发模型\n\n\nDispather: all, direct, message, execution, connection\nThreadPool: fixed, cached\n\n\n1. 即: 或者  ↩\n\n\n2. 即:  ↩\n\n\n3. 即: ↩\n\n\n4. 即: ↩\n\n\n5. DubboInvoker、 HessianRpcInvoker、 InjvmInvoker、 RmiInvoker、 WebServiceInvoker 中的任何一个 ↩\n\n"},"impls/introduction.html":{"url":"impls/introduction.html","title":"5 SPI 扩展实现","keywords":"","body":"SPI 扩展实现\nSPI 扩展接口仅用于系统集成,或 Contributor 扩展功能插件。\n"},"impls/protocol.html":{"url":"impls/protocol.html","title":"5.1 协议扩展","keywords":"","body":"协议扩展\n扩展说明\nRPC 协议扩展,封装远程调用细节。\n契约:\n\n当用户调用 refer() 所返回的 Invoker 对象的 invoke() 方法时,协议需相应执行同 URL 远端 export() 传入的 Invoker 对象的 invoke() 方法。\n其中,refer() 返回的 Invoker 由协议实现,协议通常需要在此 Invoker 中发送远程请求,export() 传入的 Invoker 由框架实现并传入,协议不需要关心。\n\n注意:\n\n协议不关心业务接口的透明代理,以 Invoker 为中心,由外层将 Invoker 转换为业务接口。\n协议不一定要是 TCP 网络通讯,比如通过共享文件,IPC 进程间通讯等。\n\n扩展接口\n\ncom.alibaba.dubbo.rpc.Protocol\ncom.alibaba.dubbo.rpc.Exporter\ncom.alibaba.dubbo.rpc.Invoker\n\npublic interface Protocol {\n    /**\n     * 暴露远程服务:\n     * 1. 协议在接收请求时,应记录请求来源方地址信息:RpcContext.getContext().setRemoteAddress();\n     * 2. export()必须是幂等的,也就是暴露同一个URL的Invoker两次,和暴露一次没有区别。\n     * 3. export()传入的Invoker由框架实现并传入,协议不需要关心。\n     * \n     * @param  服务的类型\n     * @param invoker 服务的执行体\n     * @return exporter 暴露服务的引用,用于取消暴露\n     * @throws RpcException 当暴露服务出错时抛出,比如端口已占用\n     */\n     Exporter export(Invoker invoker) throws RpcException;\n\n    /**\n     * 引用远程服务:\n     * 1. 当用户调用refer()所返回的Invoker对象的invoke()方法时,协议需相应执行同URL远端export()传入的Invoker对象的invoke()方法。\n     * 2. refer()返回的Invoker由协议实现,协议通常需要在此Invoker中发送远程请求。\n     * 3. 当url中有设置check=false时,连接失败不能抛出异常,需内部自动恢复。\n     * \n     * @param  服务的类型\n     * @param type 服务的类型\n     * @param url 远程服务的URL地址\n     * @return invoker 服务的本地代理\n     * @throws RpcException 当连接服务提供方失败时抛出\n     */\n     Invoker refer(Class type, URL url) throws RpcException;\n\n}\n\n扩展配置\n\n\n\n\n没有配置prototol属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.injvm.InjvmProtocol\ncom.alibaba.dubbo.rpc.dubbo.DubboProtocol\ncom.alibaba.dubbo.rpc.rmi.RmiProtocol\ncom.alibaba.dubbo.rpc.http.HttpProtocol\ncom.alibaba.dubbo.rpc.http.hessian.HessianProtocol\n\n扩展示例\nMaven项目结构:\n\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProtocol.java (实现Protocol接口)\n                |-XxxExporter.java (实现Exporter接口)\n                |-XxxInvoker.java (实现Invoker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Protocol (纯文本文件,内容为:xxx=com.xxx.XxxProtocol)\nXxxProtocol.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Protocol;\n\npublic class XxxProtocol implements Protocol {\n    public  Exporter export(Invoker invoker) throws RpcException {\n        return new XxxExporter(invoker);\n    }\n    public  Invoker refer(Class type, URL url) throws RpcException {\n        return new XxxInvoker(type, url);\n    }\n}\n\nXxxExporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractExporter;\n\npublic class XxxExporter extends AbstractExporter {\n    public XxxExporter(Invoker invoker) throws RemotingException{\n        super(invoker);\n        // ...\n    }\n    public void unexport() {\n        super.unexport();\n        // ...\n    }\n}\n\nXxxInvoker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.support.AbstractInvoker;\n\npublic class XxxInvoker extends AbstractInvoker {\n    public XxxInvoker(Class type, URL url) throws RemotingException{\n        super(type, url);\n    }\n    protected abstract Object doInvoke(Invocation invocation) throws Throwable {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Protocol:\nxxx=com.xxx.XxxProtocol\n\n"},"impls/filter.html":{"url":"impls/filter.html","title":"5.2 调用拦截扩展","keywords":"","body":"调用拦截扩展\n扩展说明\n服务提供方和服务消费方调用过程拦截,Dubbo 本身的大多功能均基于此扩展点实现,每次远程方法执行,该拦截都会被执行,请注意对性能的影响。\n约定:\n\n用户自定义 filter 默认在内置 filter 之后。\n特殊值 default,表示缺省扩展点插入的位置。比如:filter=\"xxx,default,yyy\",表示 xxx 在缺省 filter 之前,yyy 在缺省 filter 之后。\n特殊符号 -,表示剔除。比如:filter=\"-foo1\",剔除添加缺省扩展点 foo1。比如:filter=\"-default\",剔除添加所有缺省扩展点。\nprovider 和 service 同时配置的 filter 时,累加所有 filter,而不是覆盖。比如: 和 ,则 xxx,yyy,aaa,bbb 均会生效。如果要覆盖,需配置:\n\n扩展接口\ncom.alibaba.dubbo.rpc.Filter\n扩展配置\n\n\n\n\n\n\n\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.filter.EchoFilter\ncom.alibaba.dubbo.rpc.filter.GenericFilter\ncom.alibaba.dubbo.rpc.filter.GenericImplFilter\ncom.alibaba.dubbo.rpc.filter.TokenFilter\ncom.alibaba.dubbo.rpc.filter.AccessLogFilter\ncom.alibaba.dubbo.rpc.filter.CountFilter\ncom.alibaba.dubbo.rpc.filter.ActiveLimitFilter\ncom.alibaba.dubbo.rpc.filter.ClassLoaderFilter\ncom.alibaba.dubbo.rpc.filter.ContextFilter\ncom.alibaba.dubbo.rpc.filter.ConsumerContextFilter\ncom.alibaba.dubbo.rpc.filter.ExceptionFilter\ncom.alibaba.dubbo.rpc.filter.ExecuteLimitFilter\ncom.alibaba.dubbo.rpc.filter.DeprecatedFilter\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxFilter.java (实现Filter接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.Filter (纯文本文件,内容为:xxx=com.xxx.XxxFilter)\nXxxFilter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.Filter;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxFilter implements Filter {\n    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {\n        // before filter ...\n        Result result = invoker.invoke(invocation);\n        // after filter ...\n        return result;\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.Filter:\nxxx=com.xxx.XxxFilter\n\n"},"impls/invoker-listener.html":{"url":"impls/invoker-listener.html","title":"5.3 引用监听扩展","keywords":"","body":"引用监听扩展\n扩展说明\n当有服务引用时,触发该事件。\n扩展接口\ncom.alibaba.dubbo.rpc.InvokerListener\n扩展配置\n\n \n\n\n\n已知扩展\ncom.alibaba.dubbo.rpc.listener.DeprecatedInvokerListener\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxInvokerListener.java (实现InvokerListener接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.InvokerListener (纯文本文件,内容为:xxx=com.xxx.XxxInvokerListener)\nXxxInvokerListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.InvokerListener;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxInvokerListener implements InvokerListener {\n    public void referred(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public void destroyed(Invoker invoker) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.InvokerListener:\nxxx=com.xxx.XxxInvokerListener\n\n"},"impls/exporter-listener.html":{"url":"impls/exporter-listener.html","title":"5.4 暴露监听扩展","keywords":"","body":"暴露监听扩展\n扩展说明\n当有服务暴露时,触发该事件。\n扩展接口\ncom.alibaba.dubbo.rpc.ExporterListener\n扩展配置\n\n\n\n\n\n已知扩展\ncom.alibaba.dubbo.registry.directory.RegistryExporterListener\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExporterListener.java (实现ExporterListener接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ExporterListener (纯文本文件,内容为:xxx=com.xxx.XxxExporterListener)\nXxxExporterListener.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ExporterListener;\nimport com.alibaba.dubbo.rpc.Exporter;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxExporterListener implements ExporterListener {\n    public void exported(Exporter exporter) throws RpcException {\n        // ...\n    }\n    public void unexported(Exporter exporter) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ExporterListener:\nxxx=com.xxx.XxxExporterListener\n\n"},"impls/cluster.html":{"url":"impls/cluster.html","title":"5.5 集群扩展","keywords":"","body":"集群扩展\n扩展说明\n当有多个服务提供方时,将多个服务提供方组织成一个集群,并伪装成一个提供方。\n扩展接口\ncom.alibaba.dubbo.rpc.cluster.Cluster\n扩展配置\n\n没有配置cluster时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.support.FailoverCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailfastCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailsafeCluster\ncom.alibaba.dubbo.rpc.cluster.support.FailbackCluster\ncom.alibaba.dubbo.rpc.cluster.support.ForkingCluster\ncom.alibaba.dubbo.rpc.cluster.support.AvailableCluster\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCluster.java (实现Cluster接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Cluster (纯文本文件,内容为:xxx=com.xxx.XxxCluster)\nXxxCluster.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Cluster;\nimport com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker;\nimport com.alibaba.dubbo.rpc.cluster.Directory;\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.Result;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxCluster implements Cluster {\n    public  Invoker merge(Directory directory) throws RpcException {\n        return new AbstractClusterInvoker(directory) {\n            public Result doInvoke(Invocation invocation, List> invokers, LoadBalance loadbalance) throws RpcException {\n                // ...\n            }\n        };\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Cluster:\nxxx=com.xxx.XxxCluster\n\n"},"impls/router.html":{"url":"impls/router.html","title":"5.6 路由扩展","keywords":"","body":"路由扩展\n扩展说明\n从多个服务提者方中选择一个进行调用。\n扩展接口\n\ncom.alibaba.dubbo.rpc.cluster.RouterFactory\ncom.alibaba.dubbo.rpc.cluster.Router\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.router.ScriptRouterFactory\ncom.alibaba.dubbo.rpc.cluster.router.FileRouterFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRouterFactory.java (实现LoadBalance接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.RouterFactory (纯文本文件,内容为:xxx=com.xxx.XxxRouterFactory)\nXxxRouterFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.RouterFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException;\n\npublic class XxxRouterFactory implements RouterFactory {\n    public  List> select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.RouterFactory:\nxxx=com.xxx.XxxRouterFactory\n\n"},"impls/load-balance.html":{"url":"impls/load-balance.html","title":"5.7 负载均衡扩展","keywords":"","body":"负载均衡扩展\n扩展说明\n从多个服务提者方中选择一个进行调用\n扩展接口\ncom.alibaba.dubbo.rpc.cluster.LoadBalance\n扩展配置\n\n没有配置loadbalance时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RandomLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.RoundRobinLoadBalance\ncom.alibaba.dubbo.rpc.cluster.loadbalance.LeastActiveLoadBalance\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoadBalance.java (实现LoadBalance接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.LoadBalance (纯文本文件,内容为:xxx=com.xxx.XxxLoadBalance)\nXxxLoadBalance.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.LoadBalance;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.Invocation;\nimport com.alibaba.dubbo.rpc.RpcException; \n\npublic class XxxLoadBalance implements LoadBalance {\n    public  Invoker select(List> invokers, Invocation invocation) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.LoadBalance:\nxxx=com.xxx.XxxLoadBalance\n\n"},"impls/merger.html":{"url":"impls/merger.html","title":"5.8 合并结果扩展","keywords":"","body":"合并结果扩展\n扩展说明\n合并返回结果,用于分组聚合。\n扩展接口\ncom.alibaba.dubbo.rpc.cluster.Merger\n扩展配置\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.cluster.merger.ArrayMerger\ncom.alibaba.dubbo.rpc.cluster.merger.ListMerger\ncom.alibaba.dubbo.rpc.cluster.merger.SetMerger\ncom.alibaba.dubbo.rpc.cluster.merger.MapMerger\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMerger.java (实现Merger接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.cluster.Merger (纯文本文件,内容为:xxx=com.xxx.XxxMerger)\nXxxMerger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.cluster.Merger;\n\npublic class XxxMerger implements Merger {\n    public T merge(T... results) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.cluster.Merger:\nxxx=com.xxx.XxxMerger\n\n"},"impls/registry.html":{"url":"impls/registry.html","title":"5.9 注册中心扩展","keywords":"","body":"注册中心扩展\n扩展说明\n负责服务的注册与发现。\n扩展接口\n\ncom.alibaba.dubbo.registry.RegistryFactory\ncom.alibaba.dubbo.registry.Registry\n\n扩展配置\n\n\n\n\n没有配置registry属性时,使用此配置 -->\n\n\n扩展契约\nRegistryFactory.java:\npublic interface RegistryFactory {\n    /**\n     * 连接注册中心.\n     * \n     * 连接注册中心需处理契约:\n     * 1. 当设置check=false时表示不检查连接,否则在连接不上时抛出异常。\n     * 2. 支持URL上的username:password权限认证。\n     * 3. 支持backup=10.20.153.10备选注册中心集群地址。\n     * 4. 支持file=registry.cache本地磁盘文件缓存。\n     * 5. 支持timeout=1000请求超时设置。\n     * 6. 支持session=60000会话超时或过期设置。\n     * \n     * @param url 注册中心地址,不允许为空\n     * @return 注册中心引用,总不返回空\n     */\n    Registry getRegistry(URL url); \n}\n\nRegistryService.java:\npublic interface RegistryService { // Registry extends RegistryService \n    /**\n     * 注册服务.\n     * \n     * 注册需处理契约:\n     * 1. 当URL设置了check=false时,注册失败后不报错,在后台定时重试,否则抛出异常。\n     * 2. 当URL设置了dynamic=false参数,则需持久存储,否则,当注册者出现断电等情况异常退出时,需自动删除。\n     * 3. 当URL设置了category=overrides时,表示分类存储,缺省类别为providers,可按分类部分通知数据。\n     * 4. 当注册中心重启,网络抖动,不能丢失数据,包括断线自动删除数据。\n     * 5. 允许URI相同但参数不同的URL并存,不能覆盖。\n     * \n     * @param url 注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void register(URL url);\n\n    /**\n     * 取消注册服务.\n     * \n     * 取消注册需处理契约:\n     * 1. 如果是dynamic=false的持久存储数据,找不到注册数据,则抛IllegalStateException,否则忽略。\n     * 2. 按全URL匹配取消注册。\n     * \n     * @param url 注册信息,不允许为空,如:dubbo://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     */\n    void unregister(URL url);\n\n    /**\n     * 订阅服务.\n     * \n     * 订阅需处理契约:\n     * 1. 当URL设置了check=false时,订阅失败后不报错,在后台定时重试。\n     * 2. 当URL设置了category=overrides,只通知指定分类的数据,多个分类用逗号分隔,并允许星号通配,表示订阅所有分类数据。\n     * 3. 允许以interface,group,version,classifier作为条件查询,如:interface=com.alibaba.foo.BarService&version=1.0.0\n     * 4. 并且查询条件允许星号通配,订阅所有接口的所有分组的所有版本,或:interface=*&group=*&version=*&classifier=*\n     * 5. 当注册中心重启,网络抖动,需自动恢复订阅请求。\n     * 6. 允许URI相同但参数不同的URL并存,不能覆盖。\n     * 7. 必须阻塞订阅过程,等第一次通知完后再返回。\n     * \n     * @param url 订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener 变更事件监听器,不允许为空\n     */\n    void subscribe(URL url, NotifyListener listener);\n\n    /**\n     * 取消订阅服务.\n     * \n     * 取消订阅需处理契约:\n     * 1. 如果没有订阅,直接忽略。\n     * 2. 按全URL匹配取消订阅。\n     * \n     * @param url 订阅条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @param listener 变更事件监听器,不允许为空\n     */\n    void unsubscribe(URL url, NotifyListener listener);\n\n    /**\n     * 查询注册列表,与订阅的推模式相对应,这里为拉模式,只返回一次结果。\n     * \n     * @see com.alibaba.dubbo.registry.NotifyListener#notify(List)\n     * @param url 查询条件,不允许为空,如:consumer://10.20.153.10/com.alibaba.foo.BarService?version=1.0.0&application=kylin\n     * @return 已注册信息列表,可能为空,含义同{@link com.alibaba.dubbo.registry.NotifyListener#notify(List)}的参数。\n     */\n    List lookup(URL url);\n\n}\n\nNotifyListener.java:\npublic interface NotifyListener { \n    /**\n     * 当收到服务变更通知时触发。\n     * \n     * 通知需处理契约:\n     * 1. 总是以服务接口和数据类型为维度全量通知,即不会通知一个服务的同类型的部分数据,用户不需要对比上一次通知结果。\n     * 2. 订阅时的第一次通知,必须是一个服务的所有类型数据的全量通知。\n     * 3. 中途变更时,允许不同类型的数据分开通知,比如:providers, consumers, routes, overrides,允许只通知其中一种类型,但该类型的数据必须是全量的,不是增量的。\n     * 4. 如果一种类型的数据为空,需通知一个empty协议并带category参数的标识性URL数据。\n     * 5. 通知者(即注册中心实现)需保证通知的顺序,比如:单线程推送,队列串行化,带版本对比。\n     * \n     * @param urls 已注册信息列表,总不为空,含义同{@link com.alibaba.dubbo.registry.RegistryService#lookup(URL)}的返回值。\n     */\n    void notify(List urls);\n\n}\n\n已知扩展\ncom.alibaba.dubbo.registry.support.dubbo.DubboRegistryFactory\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxRegistryFactoryjava (实现RegistryFactory接口)\n                |-XxxRegistry.java (实现Registry接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.registry.RegistryFactory (纯文本文件,内容为:xxx=com.xxx.XxxRegistryFactory)\nXxxRegistryFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.RegistryFactory;\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistryFactory implements RegistryFactory {\n    public Registry getRegistry(URL url) {\n        return new XxxRegistry(url);\n    }\n}\n\nXxxRegistry.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.registry.Registry;\nimport com.alibaba.dubbo.registry.NotifyListener;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxRegistry implements Registry {\n    public void register(URL url) {\n        // ...\n    }\n    public void unregister(URL url) {\n        // ...\n    }\n    public void subscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n    public void unsubscribe(URL url, NotifyListener listener) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.registry.RegistryFactory:\nxxx=com.xxx.XxxRegistryFactory\n\n"},"impls/monitor.html":{"url":"impls/monitor.html","title":"5.10 监控中心扩展","keywords":"","body":"监控中心扩展\n扩展说明\n负责服务调用次和调用时间的监控。\n扩展接口\n\ncom.alibaba.dubbo.monitor.MonitorFactory\ncom.alibaba.dubbo.monitor.Monitor\n\n扩展配置\n\n\n\n已知扩展\ncom.alibaba.dubbo.monitor.support.dubbo.DubboMonitorFactory\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxMonitorFactoryjava (实现MonitorFactory接口)\n                |-XxxMonitor.java (实现Monitor接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.monitor.MonitorFactory (纯文本文件,内容为:xxx=com.xxx.XxxMonitorFactory)\nXxxMonitorFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.MonitorFactory;\nimport com.alibaba.dubbo.monitor.Monitor;\nimport com.alibaba.dubbo.common.URL;\n\npublic class XxxMonitorFactory implements MonitorFactory {\n    public Monitor getMonitor(URL url) {\n        return new XxxMonitor(url);\n    }\n}\n\nXxxMonitor.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.monitor.Monitor;\n\npublic class XxxMonitor implements Monitor {\n    public void count(URL statistics) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.monitor.MonitorFactory:\nxxx=com.xxx.XxxMonitorFactory\n\n"},"impls/extension-factory.html":{"url":"impls/extension-factory.html","title":"5.11 扩展点加载扩展","keywords":"","body":"扩展点加载扩展\n扩展说明\n扩展点本身的加载容器,可从不同容器加载扩展点。\n扩展接口\ncom.alibaba.dubbo.common.extension.ExtensionFactory\n扩展配置\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.extension.factory.SpiExtensionFactory\ncom.alibaba.dubbo.config.spring.extension.SpringExtensionFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExtensionFactory.java (实现ExtensionFactory接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.extension.ExtensionFactory (纯文本文件,内容为:xxx=com.xxx.XxxExtensionFactory)\nXxxExtensionFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.extension.ExtensionFactory;\n\npublic class XxxExtensionFactory implements ExtensionFactory {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.extension.ExtensionFactory:\nxxx=com.xxx.XxxExtensionFactory\n\n"},"impls/proxy-factory.html":{"url":"impls/proxy-factory.html","title":"5.12 动态代理扩展","keywords":"","body":"动态代理扩展\n扩展说明\n将 Invoker 接口转换成业务接口。\n扩展接口\ncom.alibaba.dubbo.rpc.ProxyFactory\n扩展配置\n\n没有配置proxy属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.rpc.proxy.JdkProxyFactory\ncom.alibaba.dubbo.rpc.proxy.JavassistProxyFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxProxyFactory.java (实现ProxyFactory接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.rpc.ProxyFactory (纯文本文件,内容为:xxx=com.xxx.XxxProxyFactory)\nXxxProxyFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.rpc.ProxyFactory;\nimport com.alibaba.dubbo.rpc.Invoker;\nimport com.alibaba.dubbo.rpc.RpcException;\n\n\npublic class XxxProxyFactory implements ProxyFactory {\n    public  T getProxy(Invoker invoker) throws RpcException {\n        // ...\n    }\n    public  Invoker getInvoker(T proxy, Class type, URL url) throws RpcException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.rpc.ProxyFactory:\nxxx=com.xxx.XxxProxyFactory\n\n"},"impls/compiler.html":{"url":"impls/compiler.html","title":"5.13 编译器扩展","keywords":"","body":"编译器扩展\n扩展说明\nJava 代码编译器,用于动态生成字节码,加速调用。\n扩展接口\ncom.alibaba.dubbo.common.compiler.Compiler\n扩展配置\n自动加载\n已知扩展\n\ncom.alibaba.dubbo.common.compiler.support.JdkCompiler\ncom.alibaba.dubbo.common.compiler.support.JavassistCompiler\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCompiler.java (实现Compiler接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.compiler.Compiler (纯文本文件,内容为:xxx=com.xxx.XxxCompiler)\nXxxCompiler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.compiler.Compiler;\n\npublic class XxxCompiler implements Compiler {\n    public Object getExtension(Class type, String name) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.compiler.Compiler:\nxxx=com.xxx.XxxCompiler\n\n"},"impls/dispatcher.html":{"url":"impls/dispatcher.html","title":"5.14 消息派发扩展","keywords":"","body":"消息派发扩展\n扩展说明\n通道信息派发器,用于指定线程池模型。\n扩展接口\ncom.alibaba.dubbo.remoting.Dispatcher\n扩展配置\n\n没有配置dispatcher属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.transport.dispatcher.all.AllDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.direct.DirectDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.message.MessageOnlyDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.execution.ExecutionDispatcher\ncom.alibaba.dubbo.remoting.transport.dispatcher.connection.ConnectionOrderedDispatcher\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxDispatcher.java (实现Dispatcher接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Dispatcher (纯文本文件,内容为:xxx=com.xxx.XxxDispatcher)\nXxxDispatcher.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Dispatcher;\n\npublic class XxxDispatcher implements Dispatcher {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Dispatcher:\nxxx=com.xxx.XxxDispatcher\n\n"},"impls/threadpool.html":{"url":"impls/threadpool.html","title":"5.15 线程池扩展","keywords":"","body":"线程池扩展\n扩展说明\n服务提供方线程程实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。\n扩展接口\ncom.alibaba.dubbo.common.threadpool.ThreadPool\n扩展配置\n\n没有配置threadpool时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.threadpool.FixedThreadPool\ncom.alibaba.dubbo.common.threadpool.CachedThreadPool\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxThreadPool.java (实现ThreadPool接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.threadpool.ThreadPool (纯文本文件,内容为:xxx=com.xxx.XxxThreadPool)\nXxxThreadPool.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.threadpool.ThreadPool;\nimport java.util.concurrent.Executor;\n\npublic class XxxThreadPool implements ThreadPool {\n    public Executor getExecutor() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.threadpool.ThreadPool:\nxxx=com.xxx.XxxThreadPool\n\n"},"impls/serialize.html":{"url":"impls/serialize.html","title":"5.16 序列化扩展","keywords":"","body":"序列化扩展\n扩展说明\n将对象转成字节流,用于网络传输,以及将字节流转为对象,用于在收到字节流数据后还原成对象。\n扩展接口\n\ncom.alibaba.dubbo.common.serialize.Serialization\ncom.alibaba.dubbo.common.serialize.ObjectInput\ncom.alibaba.dubbo.common.serialize.ObjectOutput\n\n扩展配置\n\n\n没有配置serialization时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.serialize.dubbo.DubboSerialization\ncom.alibaba.dubbo.common.serialize.hessian.Hessian2Serialization\ncom.alibaba.dubbo.common.serialize.java.JavaSerialization\ncom.alibaba.dubbo.common.serialize.java.CompactedJavaSerialization\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxSerialization.java (实现Serialization接口)\n                |-XxxObjectInput.java (实现ObjectInput接口)\n                |-XxxObjectOutput.java (实现ObjectOutput接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.serialize.Serialization (纯文本文件,内容为:xxx=com.xxx.XxxSerialization)\nXxxSerialization.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.serialize.Serialization;\nimport com.alibaba.dubbo.common.serialize.ObjectInput;\nimport com.alibaba.dubbo.common.serialize.ObjectOutput;\n\n\npublic class XxxSerialization implements Serialization {\n    public ObjectOutput serialize(Parameters parameters, OutputStream output) throws IOException {\n        return new XxxObjectOutput(output);\n    }\n    public ObjectInput deserialize(Parameters parameters, InputStream input) throws IOException {\n        return new XxxObjectInput(input);\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.serialize.Serialization:\nxxx=com.xxx.XxxSerialization\n\n"},"impls/remoting.html":{"url":"impls/remoting.html","title":"5.17 网络传输扩展","keywords":"","body":"网络传输扩展\n扩展说明\n远程通讯的服务器及客户端传输实现。\n扩展接口\n\ncom.alibaba.dubbo.remoting.Transporter\ncom.alibaba.dubbo.remoting.Server\ncom.alibaba.dubbo.remoting.Client\n\n扩展配置\n\n \n\n \n没有配置transporter/server/client属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.transport.transporter.netty.NettyTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.mina.MinaTransporter\ncom.alibaba.dubbo.remoting.transport.transporter.grizzly.GrizzlyTransporter\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTransporter.java (实现Transporter接口)\n                |-XxxServer.java (实现Server接口)\n                |-XxxClient.java (实现Client接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.Transporter (纯文本文件,内容为:xxx=com.xxx.XxxTransporter)\nXxxTransporter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.Transporter;\n\npublic class XxxTransporter implements Transporter {\n    public Server bind(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxServer(url, handler);\n    }\n    public Client connect(URL url, ChannelHandler handler) throws RemotingException {\n        return new XxxClient(url, handler);\n    }\n}\n\nXxxServer.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractServer;\n\npublic class XxxServer extends AbstractServer {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    public Collection getChannels() {\n        // ...\n    }\n    public Channel getChannel(InetSocketAddress remoteAddress) {\n        // ...\n    }\n}\n\nXxxClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.transport.transporter.AbstractClient;\n\npublic class XxxClient extends AbstractClient {\n    public XxxServer(URL url, ChannelHandler handler) throws RemotingException{\n        super(url, handler);\n    }\n    protected void doOpen() throws Throwable {\n        // ...\n    }\n    protected void doClose() throws Throwable {\n        // ...\n    }\n    protected void doConnect() throws Throwable {\n        // ...\n    }\n    public Channel getChannel() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.Transporter:\nxxx=com.xxx.XxxTransporter\n\n"},"impls/exchanger.html":{"url":"impls/exchanger.html","title":"5.18 信息交换扩展","keywords":"","body":"信息交换扩展\n扩展说明\n基于传输层之上,实现 Request-Response 信息交换语义。\n扩展接口\n\ncom.alibaba.dubbo.remoting.exchange.Exchanger\ncom.alibaba.dubbo.remoting.exchange.ExchangeServer\ncom.alibaba.dubbo.remoting.exchange.ExchangeClient\n\n扩展配置\n\n没有配置exchanger属性时,使用此配置 -->\n\n\n已知扩展\ncom.alibaba.dubbo.remoting.exchange.exchanger.HeaderExchanger\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxExchanger.java (实现Exchanger接口)\n                |-XxxExchangeServer.java (实现ExchangeServer接口)\n                |-XxxExchangeClient.java (实现ExchangeClient接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.exchange.Exchanger (纯文本文件,内容为:xxx=com.xxx.XxxExchanger)\nXxxExchanger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.Exchanger;\n\n\npublic class XxxExchanger implements Exchanger {\n    public ExchangeServer bind(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeServer(url, handler);\n    }\n    public ExchangeClient connect(URL url, ExchangeHandler handler) throws RemotingException {\n        return new XxxExchangeClient(url, handler);\n    }\n}\n\nXxxExchangeServer.java:\n\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeServer;\n\npublic class XxxExchangeServer impelements ExchangeServer {\n    // ...\n}\n\nXxxExchangeClient.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.exchange.ExchangeClient;\n\npublic class XxxExchangeClient impelments ExchangeClient {\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.exchange.Exchanger:\nxxx=com.xxx.XxxExchanger\n\n"},"impls/networker.html":{"url":"impls/networker.html","title":"5.19 组网扩展","keywords":"","body":"组网扩展\n扩展说明\n对等网络节点组网器。\n扩展接口\ncom.alibaba.dubbo.remoting.p2p.Networker\n扩展配置\n\n没有配置networker属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.p2p.support.MulticastNetworker\ncom.alibaba.dubbo.remoting.p2p.support.FileNetworker\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxNetworker.java (实现Networker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.p2p.Networker (纯文本文件,内容为:xxx=com.xxx.XxxNetworker)\nXxxNetworker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.p2p.Networker;\n\npublic class XxxNetworker implements Networker {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.p2p.Networker:\nxxx=com.xxx.XxxNetworker\n\n"},"impls/telnet-handler.html":{"url":"impls/telnet-handler.html","title":"5.20 Telnet 命令扩展","keywords":"","body":"Telnet 命令扩展\n扩展说明\n所有服务器均支持 telnet 访问,用于人工干预。\n扩展接口\ncom.alibaba.dubbo.remoting.telnet.TelnetHandler\n扩展配置\n\n没有配置telnet属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.remoting.telnet.support.ClearTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.ExitTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.HelpTelnetHandler\ncom.alibaba.dubbo.remoting.telnet.support.StatusTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ListTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.ChangeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CurrentTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.InvokeTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.TraceTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.CountTelnetHandler\ncom.alibaba.dubbo.rpc.dubbo.telnet.PortTelnetHandler\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxTelnetHandler.java (实现TelnetHandler接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.remoting.telnet.TelnetHandler (纯文本文件,内容为:xxx=com.xxx.XxxTelnetHandler)\nXxxTelnetHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.remoting.telnet.TelnetHandler;\n\n@Help(parameter=\"...\", summary=\"...\", detail=\"...\")\n\npublic class XxxTelnetHandler implements TelnetHandler {\n    public String telnet(Channel channel, String message) throws RemotingException {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.remoting.telnet.TelnetHandler:\nxxx=com.xxx.XxxTelnetHandler\n\n用法\ntelnet 127.0.0.1 20880\ndubbo> xxx args\n\n"},"impls/status-checker.html":{"url":"impls/status-checker.html","title":"5.21 状态检查扩展","keywords":"","body":"状态检查扩展\n扩展说明\n检查服务依赖各种资源的状态,此状态检查可同时用于 telnet 的 status 命令和 hosting 的 status 页面。\n扩展接口\ncom.alibaba.dubbo.common.status.StatusChecker\n扩展配置\n\n没有配置status属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.common.status.support.MemoryStatusChecker\ncom.alibaba.dubbo.common.status.support.LoadStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ServerStatusChecker\ncom.alibaba.dubbo.rpc.dubbo.status.ThreadPoolStatusChecker\ncom.alibaba.dubbo.registry.directory.RegistryStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.SpringStatusChecker\ncom.alibaba.dubbo.rpc.config.spring.status.DataSourceStatusChecker\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxStatusChecker.java (实现StatusChecker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.status.StatusChecker (纯文本文件,内容为:xxx=com.xxx.XxxStatusChecker)\nXxxStatusChecker.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.status.StatusChecker;\n\npublic class XxxStatusChecker implements StatusChecker {\n    public Status check() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.status.StatusChecker:\nxxx=com.xxx.XxxStatusChecker\n\n"},"impls/container.html":{"url":"impls/container.html","title":"5.22 容器扩展","keywords":"","body":"容器扩展\n扩展说明\n服务容器扩展,用于自定义加载内容。\n扩展接口\ncom.alibaba.dubbo.container.Container\n扩展配置\njava com.alibaba.dubbo.container.Main spring jetty log4j\n\n已知扩展\n\ncom.alibaba.dubbo.container.spring.SpringContainer\ncom.alibaba.dubbo.container.spring.JettyContainer\ncom.alibaba.dubbo.container.spring.Log4jContainer\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxContainer.java (实现Container接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.Container (纯文本文件,内容为:xxx=com.xxx.XxxContainer)\nXxxContainer.java:\npackage com.xxx;\n\ncom.alibaba.dubbo.container.Container;\n\n\npublic class XxxContainer implements Container {\n    public Status start() {\n        // ...\n    }\n    public Status stop() {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.Container:\nxxx=com.xxx.XxxContainer\n\n"},"impls/page.html":{"url":"impls/page.html","title":"5.23 页面扩展","keywords":"","body":"页面扩展\n扩展说明\n对等网络节点组网器。\n扩展接口\ncom.alibaba.dubbo.container.page.PageHandler\n扩展配置\n\n没有配置page属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.container.page.pages.HomePageHandler\ncom.alibaba.dubbo.container.page.pages.StatusPageHandler\ncom.alibaba.dubbo.container.page.pages.LogPageHandler\ncom.alibaba.dubbo.container.page.pages.SystemPageHandler\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxPageHandler.java (实现PageHandler接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.container.page.PageHandler (纯文本文件,内容为:xxx=com.xxx.XxxPageHandler)\nXxxPageHandler.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.container.page.PageHandler;\n\npublic class XxxPageHandler implements PageHandler {\n    public Group lookup(URL url) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.container.page.PageHandler:\nxxx=com.xxx.XxxPageHandler\n\n"},"impls/cache.html":{"url":"impls/cache.html","title":"5.24 缓存扩展","keywords":"","body":"缓存扩展\n扩展说明\n用请求参数作为 key,缓存返回结果。\n扩展接口\ncom.alibaba.dubbo.cache.CacheFactory\n扩展配置\n\n\n \n没有配置cache属性时,使用此配置 -->\n\n\n已知扩展\n\ncom.alibaba.dubbo.cache.support.lru.LruCacheFactory\ncom.alibaba.dubbo.cache.support.threadlocal.ThreadLocalCacheFactory\ncom.alibaba.dubbo.cache.support.jcache.JCacheFactory\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxCacheFactory.java (实现StatusChecker接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.cache.CacheFactory (纯文本文件,内容为:xxx=com.xxx.XxxCacheFactory)\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.CacheFactory;\n\npublic class XxxCacheFactory implements CacheFactory {\n    public Cache getCache(URL url, String name) {\n        return new XxxCache(url, name);\n    }\n}\n\nXxxCacheFactory.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.cache.Cache;\n\npublic class XxxCache implements Cache {\n    public Cache(URL url, String name) {\n        // ...\n    }\n    public void put(Object key, Object value) {\n        // ...\n    }\n    public Object get(Object key) {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.cache.CacheFactory:\nxxx=com.xxx.XxxCacheFactory\n\n"},"impls/validation.html":{"url":"impls/validation.html","title":"5.25 验证扩展","keywords":"","body":"验证扩展\n扩展说明\n参数验证扩展点。\n扩展接口\ncom.alibaba.dubbo.validation.Validation\n扩展配置\n\n没有配置validation属性时,使用此配置 -->\n\n\n已知扩展\ncom.alibaba.dubbo.validation.support.jvalidation.JValidation\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxValidation.java (实现Validation接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.validation.Validation (纯文本文件,内容为:xxx=com.xxx.XxxValidation)\nXxxValidation.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validation;\n\npublic class XxxValidation implements Validation {\n    public Object getValidator(URL url) {\n        // ...\n    }\n}\n\nXxxValidator.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.validation.Validator;\n\npublic class XxxValidator implements Validator {\n    public XxxValidator(URL url) {\n        // ...\n    }\n    public void validate(Invocation invocation) throws Exception {\n        // ...\n    }\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.validation.Validation:\nxxx=com.xxx.XxxValidation\n\n"},"impls/logger-adapter.html":{"url":"impls/logger-adapter.html","title":"5.26 日志适配扩展","keywords":"","body":"日志适配扩展\n扩展说明\n日志输出适配扩展点。\n扩展接口\ncom.alibaba.dubbo.common.logger.LoggerAdapter\n扩展配置\n\n\n或者:\n-Ddubbo:application.logger=xxx\n\n已知扩展\n\ncom.alibaba.dubbo.common.logger.slf4j.Slf4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jcl.JclLoggerAdapter\ncom.alibaba.dubbo.common.logger.log4j.Log4jLoggerAdapter\ncom.alibaba.dubbo.common.logger.jdk.JdkLoggerAdapter\n\n扩展示例\nMaven 项目结构:\nsrc\n |-main\n    |-java\n        |-com\n            |-xxx\n                |-XxxLoggerAdapter.java (实现LoggerAdapter接口)\n    |-resources\n        |-META-INF\n            |-dubbo\n                |-com.alibaba.dubbo.common.logger.LoggerAdapter (纯文本文件,内容为:xxx=com.xxx.XxxLoggerAdapter)\nXxxLoggerAdapter.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.LoggerAdapter;\n\npublic class XxxLoggerAdapter implements LoggerAdapter {\n    public Logger getLogger(URL url) {\n        // ...\n    }\n}\n\nXxxLogger.java:\npackage com.xxx;\n\nimport com.alibaba.dubbo.common.logger.Logger;\n\npublic class XxxLogger implements Logger {\n    public XxxLogger(URL url) {\n        // ...\n    }\n    public void info(String msg) {\n        // ...\n    }\n    // ...\n}\n\nMETA-INF/dubbo/com.alibaba.dubbo.common.logger.LoggerAdapter:\nxxx=com.xxx.XxxLoggerAdapter\n\n"},"contract.html":{"url":"contract.html","title":"6 公共契约","keywords":"","body":"公共契约\n这里记录的是 Dubbo 公共契约,希望所有扩展点遵守。\nURL\n\n所有扩展点参数都包含 URL 参数,URL 作为上下文信息贯穿整个扩展点设计体系。\nURL 采用标准格式:protocol://username:password@host:port/path?key=value&key=value\n\n日志\n\n如果不可恢复或需要报警,打印 ERROR 日志。\n如果可恢复异常,或瞬时的状态不一致,打印 WARN 日志。\n正常运行时的中间状态提示,打印 INFO 日志。\n\n"},"coding.html":{"url":"coding.html","title":"7 编码约定","keywords":"","body":"编码约定\n代码风格\nDubbo 的源代码和 JavaDoc 遵循以下的规范:\n\nCode Conventions for the Java Programming Language\nHow to Write Doc Comments for the Javadoc Tool\n\n异常和日志\n\n尽可能携带完整的上下文信息,比如出错原因,出错的机器地址,调用对方的地址,连的注册中心地址,使用 Dubbo 的版本等。\n尽量将直接原因写在最前面,所有上下文信息,在原因后用键值对显示。\n抛出异常的地方不用打印日志,由最终处理异常者决定打印日志的级别,吃掉异常必需打印日志。\n打印 ERROR 日志表示需要报警,打印 WARN 日志表示可以自动恢复,打印 INFO 表示正常信息或完全不影响运行。\n建议应用方在监控中心配置 ERROR 日志实时报警,WARN 日志每周汇总发送通知。\nRpcException 是 Dubbo 对外的唯一异常类型,所有内部异常,如果要抛出给用户,必须转为 RpcException。\nRpcException 不能有子类型,所有类型信息用 ErrorCode 标识,以便保持兼容。\n\n配置和 URL\n\n配置对象属性首字母小写,多个单词用驼峰命名 1。\n配置属性全部用小写,多个单词用\"-\"号分隔 2。\nURL参数全部用小写,多个单词用\".\"号分隔 3。\n尽可能用 URL 传参,不要自定义 Map 或其它上下文格式,配置信息也转成 URL 格式使用。\n尽量减少 URL 嵌套,保持 URL 的简洁性。\n\n单元和集成测试\n\n单元测试统一用 JUnit 和 EasyMock,集成测试用 TestNG,数据库测试用 DBUnit。\n保持单元测试用例的运行速度,不要将性能和大的集成用例放在单元测试中。\n保持单元测试的每个用例都用 try...finally 或 tearDown 释放资源。\n减少 while 循环等待结果的测试用例,对定时器和网络的测试,用以将定时器中的逻辑抽为方法测试。\n对于容错行为的测试,比如 failsafe 的测试,统一用 LogUtil 断言日志输出。\n\n扩展点基类与 AOP\n\nAOP 类都命名为 XxxWrapper,基类都命名为 AbstractXxx。\n扩展点之间的组合将关系由 AOP 完成,ExtensionLoader 只负载加载扩展点,包括 AOP 扩展。\n尽量采用 IoC 注入扩展点之间的依赖,不要直接依赖 ExtensionLoader 的工厂方法。\n尽量采用 AOP 实现扩展点的通用行为,而不要用基类,比如负载均衡之前的 isAvailable 检查,它是独立于负载均衡之外的,不需要检查的是URL参数关闭。\n对多种相似类型的抽象,用基类实现,比如 RMI, Hessian 等第三方协议都已生成了接口代理,只需将将接口代理转成 Invoker 即可完成桥接,它们可以用公共基类实现此逻辑。\n基类也是 SPI 的一部分,每个扩展点都应该有方便使用的基类支持。\n\n模块与分包\n\n基于复用度分包,总是一起使用的放在同一包下,将接口和基类分成独立模块,大的实现也使用独立模块。\n所有接口都放在模块的根包下,基类放在 support 子包下,不同实现用放在以扩展点名字命名的子包下。\n尽量保持子包依赖父包,而不要反向。\n\n\n1. Java 约定 ↩\n\n\n2. Spring 约定 ↩\n\n\n3. Dubbo 约定 ↩\n\n"},"principals/introduction.html":{"url":"principals/introduction.html","title":"8 设计原则","keywords":"","body":"设计原则\n本章节的设计原则摘录自梁飞在 javaeye 上发表的系列文章。\n"},"principals/code-detail.html":{"url":"principals/code-detail.html","title":"8.1 魔鬼在细节","keywords":"","body":"魔鬼在细节\n\nhttp://javatar.iteye.com/blog/1056664\n\n最近一直担心 Dubbo 分布式服务框架后续如果维护人员增多或变更,会出现质量的下降, 我在想,有没有什么是需要大家共同遵守的,根据平时写代码时的一习惯,总结了一下在写代码过程中,尤其是框架代码,要时刻牢记的细节。可能下面要讲的这些,大家都会觉得很简单,很基础,但要做到时刻牢记。在每一行代码中都考虑这些因素,是需要很大耐心的, 大家经常说,魔鬼在细节中,确实如此。 \n防止空指针和下标越界\n这是我最不喜欢看到的异常,尤其在核心框架中,我更愿看到信息详细的参数不合法异常。这也是一个健状的程序开发人员,在写每一行代码都应在潜意识中防止的异常。基本上要能确保一次写完的代码,在不测试的情况,都不会出现这两个异常才算合格。 \n保证线程安全性和可见性\n对于框架的开发人员,对线程安全性和可见性的深入理解是最基本的要求。需要开发人员,在写每一行代码时都应在潜意识中确保其正确性。因为这种代码,在小并发下做功能测试时,会显得很正常。但在高并发下就会出现莫明其妙的问题,而且场景很难重现,极难排查。 \n尽早失败和前置断言\n尽早失败也应该成为潜意识,在有传入参数和状态变化时,均在入口处全部断言。一个不合法的值和状态,在第一时间就应报错,而不是等到要用时才报错。因为等到要用时,可能前面已经修改其它相关状态,而在程序中很少有人去处理回滚逻辑。这样报错后,其实内部状态可能已经混乱,极易在一个隐蔽分支上引发程序不可恢复。 \n分离可靠操作和不可靠操作\n这里的可靠是狭义的指是否会抛出异常或引起状态不一致,比如,写入一个线程安全的 Map,可以认为是可靠的,而写入数据库等,可以认为是不可靠的。开发人员必须在写每一行代码时,都注意它的可靠性与否,在代码中尽量划分开,并对失败做异常处理,并为容错,自我保护,自动恢复或切换等补偿逻辑提供清晰的切入点,保证后续增加的代码不至于放错位置,而导致原先的容错处理陷入混乱。 \n异常防御,但不忽略异常\n这里讲的异常防御,指的是对非必须途径上的代码进行最大限度的容忍,包括程序上的 BUG,比如:获取程序的版本号,会通过扫描 Manifest 和 jar 包名称抓取版本号,这个逻辑是辅助性的,但代码却不少,初步测试也没啥问题,但应该在整个 getVersion() 中加上一个全函数的 try-catch 打印错误日志,并返回基本版本,因为 getVersion() 可能存在未知特定场景异常,或被其他的开发人员误修改逻辑(但一般人员不会去掉 try-catch),而如果它抛出异常会导致主流程异常,这是我们不希望看到的。但这里要控制个度,不要随意 try-catch,更不要无声无息的吃掉异常。 \n缩小可变域和尽量 final\n如果一个类可以成为不变类(Immutable Class),就优先将它设计成不变类。不变类有天然的并发共享优势,减少同步或复制,而且可以有效帮忙分析线程安全的范围。就算是可变类,对于从构造函数传入的引用,在类中持有时,最好将字段 final,以免被中途误修改引用。不要以为这个字段是私有的,这个类的代码都是我自己写的,不会出现对这个字段的重新赋值。要考虑的一个因素是,这个代码可能被其他人修改,他不知道你的这个弱约定,final 就是一个不变契约。 \n降低修改时的误解性,不埋雷\n前面不停的提到代码被其他人修改,这也开发人员要随时紧记的。这个其他人包括未来的自己,你要总想着这个代码可能会有人去改它。我应该给修改的人一点什么提示,让他知道我现在的设计意图,而不要在程序里面加潜规则,或埋一些容易忽视的雷,比如:你用 null 表示不可用,size 等于 0 表示黑名单,这就是一个雷,下一个修改者,包括你自己,都不会记得有这样的约定,可能后面为了改某个其它 BUG,不小心改到了这里,直接引爆故障。对于这个例子,一个原则就是永远不要区分 null 引用和 empty 值。 \n提高代码的可测性\n这里的可测性主要指 Mock 的容易程度,和测试的隔离性。至于测试的自动性,可重复性,非偶然性,无序性,完备性(全覆盖),轻量性(可快速执行),一般开发人员,加上 JUnit 等工具的辅助基本都能做到,也能理解它的好处,只是工作量问题。这里要特别强调的是测试用例的单一性(只测目标类本身)和隔离性(不传染失败)。现在的测试代码,过于强调完备性,大量重复交叉测试,看起来没啥坏处,但测试代码越多,维护代价越高。经常出现的问题是,修改一行代码或加一个判断条件,引起 100 多个测试用例不通过。时间一紧,谁有这个闲功夫去改这么多形态各异的测试用例?久而久之,这个测试代码就已经不能真实反应代码现在的状况,很多时候会被迫绕过。最好的情况是,修改一行代码,有且只有一行测试代码不通过。如果修改了代码而测试用例还能通过,那也不行,表示测试没有覆盖到。另外,可 Mock 性是隔离的基础,把间接依赖的逻辑屏蔽掉。可 Mock 性的一个最大的杀手就是静态方法,尽量少用。 \n"},"principals/general-knowledge.html":{"url":"principals/general-knowledge.html","title":"8.2 一些设计上的基本常识","keywords":"","body":"一些设计上的基本常识\n\nhttp://javatar.iteye.com/blog/706098\n\n最近给团队新人讲了一些设计上的常识,可能会对其它的新人也有些帮助,把暂时想到的几条,先记在这里。 \nAPI 与 SPI 分离\n框架或组件通常有两类客户,一个是使用者,一个是扩展者。API (Application Programming Interface) 是给使用者用的,而 SPI (Service Provide Interface) 是给扩展者用的。在设计时,尽量把它们隔离开,而不要混在一起。也就是说,使用者是看不到扩展者写的实现的。\n比如:一个 Web 框架,它有一个 API 接口叫 Action,里面有个 execute() 方法,是给使用者用来写业务逻辑的。然后,Web 框架有一个 SPI 接口给扩展者控制输出方式,比如用 velocity 模板输出还是用 json 输出等。如果这个 Web 框架使用一个都继承 Action 的 VelocityAction 和一个 JsonAction 做为扩展方式,要用 velocity 模板输出的就继承 VelocityAction,要用 json 输出的就继承 JsonAction,这就是 API 和 SPI 没有分离的反面例子,SPI 接口混在了 API 接口中。\n\n合理的方式是,有一个单独的 Renderer 接口,有 VelocityRenderer 和 JsonRenderer 实现,Web 框架将 Action 的输出转交给 Renderer 接口做渲染输出。 \n\n服务域/实体域/会话域分离\n任何框架或组件,总会有核心领域模型,比如:Spring 的 Bean,Struts 的 Action,Dubbo 的 Service,Napoli 的 Queue 等等。这个核心领域模型及其组成部分称为实体域,它代表着我们要操作的目标本身。实体域通常是线程安全的,不管是通过不变类,同步状态,或复制的方式。\n服务域也就是行为域,它是组件的功能集,同时也负责实体域和会话域的生命周期管理, \n比如 Spring 的 ApplicationContext,Dubbo 的 ServiceManager 等。服务域的对象通常会比较重,而且是线程安全的,并以单一实例服务于所有调用。\n什么是会话?就是一次交互过程。会话中重要的概念是上下文,什么是上下文?比如我们说:“老地方见”,这里的“老地方”就是上下文信息。为什么说“老地方”对方会知道,因为我们前面定义了“老地方”的具体内容。所以说,上下文通常持有交互过程中的状态变量等。会话对象通常较轻,每次请求都重新创建实例,请求结束后销毁。简而言之:把元信息交由实体域持有,把一次请求中的临时状态由会话域持有,由服务域贯穿整个过程。 \n\n在重要的过程上设置拦截接口\n如果你要写个远程调用框架,那远程调用的过程应该有一个统一的拦截接口。如果你要写一个 ORM 框架,那至少 SQL 的执行过程,Mapping 过程要有拦截接口;如果你要写一个 Web 框架,那请求的执行过程应该要有拦截接口,等等。没有哪个公用的框架可以 Cover 住所有需求,允许外置行为,是框架的基本扩展方式。这样,如果有人想在远程调用前,验证下令牌,验证下黑白名单,统计下日志;如果有人想在 SQL 执行前加下分页包装,做下数据权限控制,统计下 SQL 执行时间;如果有人想在请求执行前检查下角色,包装下输入输出流,统计下请求量,等等,就可以自行完成,而不用侵入框架内部。拦截接口,通常是把过程本身用一个对象封装起来,传给拦截器链,比如:远程调用主过程为 invoke(),那拦截器接口通常为 invoke(Invocation),Invocation 对象封装了本来要执行过程的上下文,并且 Invocation 里有一个 invoke() 方法,由拦截器决定什么时候执行,同时,Invocation 也代表拦截器行为本身,这样上一拦截器的 Invocation 其实是包装的下一拦截器的过程,直到最后一个拦截器的 Invocation 是包装的最终的 invoke() 过程;同理,SQL 主过程为 execute(),那拦截器接口通常为 execute(Execution),原理一样。当然,实现方式可以任意,上面只是举例。 \n\n重要的状态的变更发送事件并留出监听接口\n这里先要讲一个事件和上面拦截器的区别,拦截器是干预过程的,它是过程的一部分,是基于过程行为的,而事件是基于状态数据的,任何行为改变的相同状态,对事件应该是一致的。事件通常是事后通知,是一个 Callback 接口,方法名通常是过去式的,比如 onChanged()。比如远程调用框架,当网络断开或连上应该发出一个事件,当出现错误也可以考虑发出一个事件,这样外围应用就有可能观察到框架内部的变化,做相应适应。 \n\n扩展接口职责尽可能单一,具有可组合性\n比如,远程调用框架它的协议是可以替换的。如果只提供一个总的扩展接口,当然可以做到切换协议,但协议支持是可以细分为底层通讯,序列化,动态代理方式等等。如果将接口拆细,正交分解,会更便于扩展者复用已有逻辑,而只是替换某部分实现策略。当然这个分解的粒度需要把握好。 \n微核插件式,平等对待第三方\n大凡发展的比较好的框架,都遵守微核的理念。Eclipse 的微核是 OSGi, Spring 的微核是 BeanFactory,Maven 的微核是 Plexus。通常核心是不应该带有功能性的,而是一个生命周期和集成容器,这样各功能可以通过相同的方式交互及扩展,并且任何功能都可以被替换。如果做不到微核,至少要平等对待第三方,即原作者能实现的功能,扩展者应该可以通过扩展的方式全部做到。原作者要把自己也当作扩展者,这样才能保证框架的可持续性及由内向外的稳定性。 \n不要控制外部对象的生命周期\n比如上面说的 Action 使用接口和 Renderer 扩展接口。框架如果让使用者或扩展者把 Action 或 Renderer 实现类的类名或类元信息报上来,然后在内部通过反射 newInstance() 创建一个实例,这样框架就控制了 Action 或 Renderer 实现类的生命周期,Action 或 Renderer 的生老病死,框架都自己做了,外部扩展或集成都无能为力。好的办法是让使用者或扩展者把 Action 或 Renderer 实现类的实例报上来,框架只是使用这些实例,这些对象是怎么创建的,怎么销毁的,都和框架无关,框架最多提供工具类辅助管理,而不是绝对控制。 \n可配置一定可编程,并保持友好的 CoC 约定\n因为使用环境的不确定因素很多,框架总会有一些配置,一般都会到 classpath 直扫某个指定名称的配置,或者启动时允许指定配置路径。做为一个通用框架,应该做到凡是能配置文件做的一定要能通过编程方式进行,否则当使用者需要将你的框架与另一个框架集成时就会带来很多不必要的麻烦。\n另外,尽可能做一个标准约定,如果用户按某种约定做事时,就不需要该配置项。比如:配置模板位置,你可以约定,如果放在 templates 目录下就不用配了,如果你想换个目录,就配置下。 \n区分命令与查询,明确前置条件与后置条件\n这个是契约式设计的一部分,尽量遵守有返回值的方法是查询方法,void 返回的方法是命令。查询方法通常是幂等性的,无副作用的,也就是不改变任何状态,调 n 次结果都是一样的,比如 get 某个属性值,或查询一条数据库记录。命令是指有副作用的,也就是会修改状态,比如 set 某个值,或 update 某条数据库记录。如果你的方法即做了修改状态的操作,又做了查询返回,如果可能,将其拆成写读分离的两个方法,比如:User deleteUser(id),删除用户并返回被删除的用户,考虑改为 getUser() 和 void 的 deleteUser()。 另外,每个方法都尽量前置断言传入参数的合法性,后置断言返回结果的合法性,并文档化。 \n增量式扩展,而不要扩充原始核心概念\n参见:谈谈扩充式扩展与增量式扩展\n"},"principals/expansibility.html":{"url":"principals/expansibility.html","title":"8.3 谈谈扩充式扩展与增量式扩展","keywords":"","body":"谈谈扩充式扩展与增量式扩展\n\nhttp://javatar.iteye.com/blog/690845\n\n我们平台的产品越来越多,产品的功能也越来越多。平台的产品为了适应各 BU 和部门以及产品线的需求,势必会将很多不相干的功能凑在一起,客户可以选择性的使用。为了兼容更多的需求,每个产品,每个框架,都在不停的扩展,而我们经常会选择一些扩展的扩展方式,也就是将新旧功能扩展成一个通用实现。我想讨论是,有些情况下也可以考虑增量式的扩展方式,也就是保留原功能的简单性,新功能独立实现。我最近一直做分布式服务框架的开发,就拿我们项目中的问题开涮吧。 \n比如:远程调用框架,肯定少不了序列化功能,功能很简单,就是把流转成对象,对象转成流。但因有些地方可能会使用 osgi,这样序列化时,IO 所在的 ClassLoader 可能和业务方的 ClassLoader 是隔离的。需要将流转换成 byte[] 数组,然后传给业务方的 ClassLoader 进行序列化。为了适应 osgi 需求,把原来非 osgi 与 osgi 的场景扩展了一下,这样,不管是不是 osgi 环境,都先将流转成 byte[] 数组,拷贝一次。然而,大部分场景都用不上 osgi,却为 osgi 付出了代价。而如果采用增量式扩展方式,非 osgi 的代码原封不动,再加一个 osgi 的实现,要用 osgi 的时候,直接依赖 osgi 实现即可。 \n再比如:最开始,远程服务都是基于接口方法,进行透明化调用的。这样,扩展接口就是, invoke(Method method, Object[] args),后来,有了无接口调用的需求,就是没有接口方法也能调用,并将 POJO 对象都转换成 Map 表示。因为 Method 对象是不能直接 new 出来的,我们不自觉选了一个扩展式扩展,把扩展接口改成了 invoke(String methodName, String[] parameterTypes, String returnTypes, Object[] args),导致不管是不是无接口调用,都得把 parameterTypes 从 Class[] 转成 String[]。如果选用增量式扩展,应该是保持原有接口不变,增加一个 GeneralService 接口,里面有一个通用的 invoke() 方法,和其它正常业务上的接口一样的调用方式,扩展接口也不用变,只是 GeneralServiceImpl 的 invoke() 实现会将收到的调用转给目标接口,这样就能将新功能增量到旧功能上,并保持原来结构的简单性。 \n再再比如:无状态消息发送,很简单,序列化一个对象发过去就行。后来有了同步消息发送需求,需要一个 Request/Response 进行配对,采用扩展式扩展,自然想到,无状态消息其实是一个没有 Response 的 Request,所以在 Request 里加一个 boolean 状态,表示要不要返回 Response。如果再来一个会话消息发送需求,那就再加一个 Session 交互,然后发现,原来同步消息发送是会话消息的一种特殊情况,所有场景都传 Session,不需要 Session 的地方无视即可。\n\n如果采用增量式扩展,无状态消息发送原封不动,同步消息发送,在无状态消息基础上加一个 Request/Response 处理,会话消息发送,再加一个 SessionRequest/SessionResponse 处理。 \n\n"},"principals/configuration.html":{"url":"principals/configuration.html","title":"8.4 配置设计","keywords":"","body":"配置设计\n\nhttp://javatar.iteye.com/blog/949527\n\nDubbo 现在的设计是完全无侵入,也就是使用者只依赖于配置契约。经过多个版本的发展,为了满足各种需求场景,配置越来越多。为了保持兼容,配置只增不减,里面潜伏着各种风格,约定,规则。新版本也将配置做了一次调整,去掉了 dubbo.properties,改为全 spring 配置。将想到的一些记在这,备忘。 \n配置分类\n首先,配置的用途是有多种的,大致可以分为: \n\n环境配置,比如:连接数,超时等配置。 \n描述配置,比如:服务接口描述,服务版本等。 \n扩展配置,比如:协议扩展,策略扩展等。 \n\n配置格式\n通常环境配置,用 properties 配置会比较方便,因为都是一些离散的简单值,用 key-value 配置可以减少配置的学习成本。 \n而描述配置,通常信息比较多,甚至有层次关系,用 xml 配置会比较方便,因为树结构的配置表现力更强。如果非常复杂,也可以考自定义 DSL 做为配置。有时候这类配置也可以用 Annotation 代替, 因为这些配置和业务逻辑相关,放在代码里也是合理的。 \n另外扩展配置,可能不尽相同。如果只是策略接口实现类替换,可以考虑 properties 等结构。如果有复杂的生命周期管理,可能需要 XML 等配置。有时候扩展会通过注册接口的方式提供。 \n配置加载\n对于环境配置,在 java 世界里,比较常规的做法,是在 classpath 下约定一个以项目为名称的 properties 配置,比如:log4j.properties,velocity.properties等。产品在初始化时,自动从 classpath 下加载该配置。我们平台的很多项目也使用类似策略,如:dubbo.properties,comsat.xml 等。这样有它的优势,就是基于约定,简化了用户对配置加载过程的干预。但同样有它的缺点,当 classpath 存在同样的配置时,可能误加载,以及在 ClassLoader 隔离时,可能找不到配置,并且,当用户希望将配置放到统一的目录时,不太方便。 \nDubbo 新版本去掉了 dubbo.properties,因为该约定经常造成配置冲突。 \n而对于描述配置,因为要参与业务逻辑,通常会嵌到应用的生命周期管理中。现在使用 spring 的项目越来越多,直接使用 spring 配置的比较普遍,而且 spring 允许自定义 schema,配置简化后很方便。当然,也有它的缺点,就是强依赖 spring,可以提编程接口做了配套方案。 \n在 Dubbo 即存在描述配置,也有环境配置。一部分用 spring 的 schame 配置加载,一部分从 classpath 扫描 properties 配置加载。用户感觉非常不便,所以在新版本中进行了合并,统一放到 spring 的 schame 配置加载,也增加了配置的灵活性。 \n扩展配置,通常对配置的聚合要求比较高。因为产品需要发现第三方实现,将其加入产品内部。在 java 世界里,通常是约定在每个 jar 包下放一个指定文件加载,比如:eclipse 的 plugin.xml,struts2 的 struts-plugin.xml 等,这类配置可以考虑 java 标准的服务发现机制,即在 jar 包的 META-INF/services 下放置接口类全名文件,内容为每行一个实现类类名,就像 jdk 中的加密算法扩展,脚本引擎扩展,新的 JDBC 驱动等,都是采用这种方式。参见:ServiceProvider 规范。\nDubbo 旧版本通过约定在每个 jar 包下,放置名为 dubbo-context.xml 的 spring 配置进行扩展与集成,新版本改成用 jdk 自带的 META-INF/services 方式,去掉过多的 spring 依赖。 \n可编程配置\n配置的可编程性是非常必要的,不管你以何种方式加载配置文件,都应该提供一个编程的配置方式,允许用户不使用配置文件,直接用代码完成配置过程。因为一个产品,尤其是组件类产品,通常需要和其它产品协作使用,当用户集成你的产品时,可能需要适配配置方式。 \nDubbo 新版本提供了与 xml 配置一对一的配置类,如:ServiceConfig 对应 ,并且属性也一对一,这样有利于文件配置与编程配置的一致性理解,减少学习成本。 \n配置缺省值\n配置的缺省值,通常是设置一个常规环境的合理值,这样可以减少用户的配置量。通常建议以线上环境为参考值,开发环境可以通过修改配置适应。缺省值的设置,最好在最外层的配置加载就做处理。程序底层如果发现配置不正确,就应该直接报错,容错在最外层做。如果在程序底层使用时,发现配置值不合理,就填一个缺省值,很容易掩盖表面问题,而引发更深层次的问题。并且配置的中间传递层,很可能并不知道底层使用了一个缺省值,一些中间的检测条件就可能失效。Dubbo 就出现过这样的问题,中间层用“地址”做为缓存 Key, 而底层,给“地址”加了一个缺省端口号,导致不加端口号的“地址”和加了缺省端口的“地址”并没有使用相同的缓存。 \n配置一致性\n配置总会隐含一些风格或潜规则,应尽可能保持其一致性。比如:很多功能都有开关,然后有一个配置值: \n\n是否使用注册中心,注册中心地址。 \n是否允许重试,重试次数。 \n\n你可以约定:\n\n每个都是先配置一个 boolean 类型的开关,再配置一个值。 \n用一个无效值代表关闭,N/A地址,0重试次数等。 \n\n不管选哪种方式,所有配置项,都应保持同一风格,Dubbo 选的是第二种。相似的还有,超时时间,重试时间,定时器间隔时间。如果一个单位是秒,另一个单位是毫秒(C3P0的配置项就是这样),配置人员会疯掉。 \n配置覆盖\n提供配置时,要同时考虑开发人员,测试人员,配管人员,系统管理员。测试人员是不能修改代码的,而测试的环境很可能较为复杂,需要为测试人员留一些“后门”,可以在外围修改配置项。就像 spring 的 PropertyPlaceholderConfigurer 配置,支持 SYSTEM_PROPERTIES_MODE_OVERRIDE,可以通过 JVM 的 -D 参数,或者像 hosts 一样约定一个覆盖配置文件,在程序外部,修改部分配置,便于测试。\nDubbo 支持通过 JVM 参数 -Dcom.xxx.XxxService=dubbo://10.1.1.1:1234 直接使远程服务调用绕过注册中心,进行点对点测试。还有一种情况,开发人员增加配置时,都会按线上的部署情况做配置,如: 因为线上只有一个注册中心,这样的配置是没有问题的,而测试环境可能有两个注册中心,测试人员不可能去修改配置,改为: \n, \n,所以这个地方,Dubbo 支持在 ${dubbo.registry.address} 的值中,通过竖号分隔多个注册中心地址,用于表示多注册中心地址。 \n配置继承\n配置也存在“重复代码”,也存在“泛化与精化”的问题。比如:Dubbo 的超时时间设置,每个服务,每个方法,都应该可以设置超时时间。但很多服务不关心超时,如果要求每个方法都配置,是不现实的。所以 Dubbo 采用了方法超时继承服务超时,服务超时再继承缺省超时,没配置时,一层层向上查找。 \n另外,Dubbo 旧版本所有的超时时间,重试次数,负载均衡策略等都只能在服务消费方配置。但实际使用过程中发现,服务提供方比消费方更清楚,但这些配置项是在消费方执行时才用到的。新版本,就加入了在服务提供方也能配这些参数,通过注册中心传递到消费方, \n做为参考值,如果消费方没有配置,就以提供方的配置为准,相当于消费方继承了提供方的建议配置值。而注册中心在传递配置时,也可以在中途修改配置,这样就达到了治理的目的,继承关系相当于:服务消费者 --> 注册中心 --> 服务提供者 \n\n配置向后兼容\n向前兼容很好办,你只要保证配置只增不减,就基本上能保证向前兼容。但向后兼容,也是要注意的,要为后续加入新的配置项做好准备。如果配置出现一个特殊配置,就应该为这个“特殊”情况约定一个兼容规则,因为这个特殊情况,很有可能在以后还会发生。比如:有一个配置文件是保存“服务=地址”映射关系的,其中有一行特殊,保存的是“注册中心=地址”。现在程序加载时,约定“注册中心”这个Key是特殊的,做特别处理,其它的都是“服务”。然而,新版本发现,要加一项“监控中心=地址”,这时,旧版本的程序会把“监控中心”做为“服务”处理,因为旧代码是不能改的,兼容性就很会很麻烦。如果先前约定“特殊标识+XXX”为特殊处理,后续就会方便很多。 \n向后兼容性,可以多向HTML5学习,参见:HTML5设计原理\n"},"principals/robustness.html":{"url":"principals/robustness.html","title":"8.5 设计实现的健壮性","keywords":"","body":"设计实现的健壮性\n\nhttp://oldratlee.com/380/tech/java/robustness-of-implement.html\n\nDubbo 作为远程服务暴露、调用和治理的解决方案,是应用运转的经络,其本身实现健壮性的重要程度是不言而喻的。\n这里列出一些 Dubbo 用到的原则和方法。\n日志\n日志是发现问题、查看问题一个最常用的手段。日志质量往往被忽视,没有日志使用上的明确约定。重视 Log 的使用,提高 Log 的信息浓度。日志过多、过于混乱,会导致有用的信息被淹没。\n要有效利用这个工具要注意:\n严格约定WARN、ERROR级别记录的内容\n\nWARN 表示可以恢复的问题,无需人工介入。\nERROR 表示需要人工介入问题。\n\n有了这样的约定,监管系统发现日志文件的中出现 ERROR 字串就报警,又尽量减少了发生。过多的报警会让人疲倦,使人对报警失去警惕性,使 ERROR 日志失去意义。再辅以人工定期查看 WARN 级别信息,以评估系统的“亚健康”程度。\n日志中,尽量多的收集关键信息\n哪些是关键信息呢?\n\n出问题时的现场信息,即排查问题要用到的信息。如服务调用失败时,要给出使用 Dubbo 的版本、服务提供者的 IP、使用的是哪个注册中心;调用的是哪个服务、哪个方法等等。这些信息如果不给出,那么事后人工收集的,问题过后现场可能已经不能复原,加大排查问题的难度。\n如果可能,给出问题的原因和解决方法。这让维护和问题解决变得简单,而不是寻求精通者(往往是实现者)的帮助。\n\n同一个或是一类问题不要重复记录多次\n同一个或是一类异常日志连续出现几十遍的情况,还是常常能看到的。人眼很容易漏掉淹没在其中不一样的重要日志信息。要尽量避免这种情况。在可以预见会出现的情况,有必要加一些逻辑来避免。\n如为一个问题准备一个标志,出问题后打日志后设置标志,避免重复打日志。问题恢复后清除标志。\n虽然有点麻烦,但是这样做保证日志信息浓度,让监控更有效。\n界限设置\n资源是有限的,CPU、内存、IO 等等。不要因为外部的请求、数据不受限的而崩溃。\n线程池(ExectorService)的大小和饱和策略\nServer 端用于处理请求的 ExectorService 设置上限。ExecutorService 的任务等待队列使用有限队列,避免资源耗尽。当任务等待队列饱和时,选择一个合适的饱和策略。这样保证平滑劣化。\n在 Dubbo 中,饱和策略是丢弃数据,等待结果也只是请求的超时。\n达到饱和时,说明已经达到服务提供方的负荷上限,要在饱和策略的操作中日志记录这个问题,以发出监控警报。记得注意不要重复多次记录哦。(注意,缺省的饱和策略不会有这些附加的操作。)根据警报的频率,已经决定扩容调整等等,避免系统问题被忽略。\n集合容量\n如果确保进入集合的元素是可控的且是足够少,则可以放心使用。这是大部分的情况。如果不能保证,则使用有有界的集合。当到达界限时,选择一个合适的丢弃策略。\n容错-重试-恢复\n高可用组件要容忍其依赖组件的失败。\nDubbo 的服务注册中心\n目前服务注册中心使用了数据库来保存服务提供者和消费者的信息。注册中心集群不同注册中心也通过数据库来之间同步数据,以感知其它注册中心上提供者。注册中心会内存中保证一份提供者和消费者数据,数据库不可用时,注册中心独立对外正常运转,只是拿不到其它注册中心的数据。当数据库恢复时,重试逻辑会内存中修改的数据写回数据库,并拿到数据库中新数据。\n服务的消费者\n服务消息者从注册中心拿到提供者列表后,会保存提供者列表到内存和磁盘文件中。这样注册中心宕后消费者可以正常运转,甚至可以在注册中心宕机过程中重启消费者。消费者启动时,发现注册中心不可用,会读取保存在磁盘文件中提供者列表。重试逻辑保证注册中心恢复后,更新信息。\n重试延迟策略\n上一点的子问题。Dubbo 中碰到有两个相关的场景。\n数据库上的活锁\n注册中心会定时更新数据库一条记录的时间戳,这样集群中其它的注册中心感知它是存活。过期注册中心和它的相关数据 会被清除。数据库正常时,这个机制运行良好。但是数据库负荷高时,其上的每个操作都会很慢。这就出现:\nA 注册中心认为 B 过期,删除 B 的数据。 B 发现自己的数据没有了,重新写入自己的数据的反复操作。这些反复的操作又加重了数据库的负荷,恶化问题。\n可以使用下面逻辑:\n当 B 发现自己数据被删除时(写入失败),选择等待这段时间再重试。重试时间可以选择指数级增长,如第一次等 1 分钟,第二次 10 分钟、第三次 100 分钟。\n这样操作减少后,保证数据库可以冷却(Cool Down)下来。\nClient 重连注册中心\n当一个注册中心停机时,其它的 Client 会同时接收事件,而去重连另一个注册中心。Client 数量相对比较多,会对注册中心造成冲击。避免方法可以是 Client 重连时随机延时 3 分钟,把重连分散开。\n"},"principals/dummy.html":{"url":"principals/dummy.html","title":"8.6 防痴呆设计","keywords":"","body":"防痴呆设计\n\nhttp://javatar.iteye.com/blog/804187\n\n最近有点痴呆,因为解决了太多的痴呆问题。服务框架实施面超来超广,已有 50 多个项目在使用,每天都要去帮应用查问题,来来回回,发现大部分都是配置错误,或者重复的文件或类,或者网络不通等,所以准备在新版本中加入防痴呆设计。估且这么叫吧,可能很简单,但对排错速度还是有点帮助,希望能抛砖引玉,也希望大家多给力,想出更多的防范措施共享出来。\n检查重复的jar包\n最痴呆的问题,就是有多个版本的相同jar包,会出现新版本的 A 类,调用了旧版本的 B 类,而且和JVM加载顺序有关,问题带有偶然性,误导性,遇到这种莫名其妙的问题,最头疼,所以,第一条,先把它防住,在每个 jar 包中挑一个一定会加载的类,加上重复类检查,给个示例:\nstatic {  \n    Duplicate.checkDuplicate(Xxx.class);  \n}\n\n检查重复工具类:\npublic final class Duplicate {  \n\n    private Duplicate() {}  \n\n    public static void checkDuplicate(Class cls) {  \n        checkDuplicate(cls.getName().replace('.', '/') + \".class\");  \n    }  \n\n    public static void checkDuplicate(String path) {  \n        try {  \n            // 在ClassPath搜文件  \n            Enumeration urls = Thread.currentThread().getContextClassLoader().getResources(path);  \n            Set files = new HashSet();  \n            while (urls.hasMoreElements()) {  \n                URL url = urls.nextElement();  \n                if (url != null) {  \n                    String file = url.getFile();  \n                    if (file != null &amp;&amp; file.length() &gt; 0) {  \n                        files.add(file);  \n                    }  \n                }  \n            }  \n            // 如果有多个,就表示重复  \n            if (files.size() &gt; 1) {  \n                logger.error(\"Duplicate class \" + path + \" in \" + files.size() + \" jar \" + files);  \n            }  \n        } catch (Throwable e) { // 防御性容错  \n            logger.error(e.getMessage(), e);  \n        }  \n    }  \n\n}\n\n检查重复的配置文件\n配置文件加载错,也是经常碰到的问题。用户通常会和你说:“我配置的很正确啊,不信我发给你看下,但就是报错”。然后查一圈下来,原来他发过来的配置根本没加载,平台很多产品都会在 classpath 下放一个约定的配置,如果项目中有多个,通常会取JVM加载的第一个,为了不被这么低级的问题折腾,和上面的重复jar包一样,在配置加载的地方,加上:\nDuplicate.checkDuplicate(\"xxx.properties\");\n\n检查所有可选配置\n必填配置估计大家都会检查,因为没有的话,根本没法运行。但对一些可选参数,也应该做一些检查,比如:服务框架允许通过注册中心关联服务消费者和服务提供者,也允许直接配置服务提供者地址点对点直连,这时候,注册中心地址是可选的,但如果没有配点对点直连配置,注册中心地址就一定要配,这时候也要做相应检查。\n异常信息给出解决方案\n在给应用排错时,最怕的就是那种只有简单的一句错误描述,啥信息都没有的异常信息。比如上次碰到一个 Failed to get session 异常,就这几个单词,啥都没有,哪个 session 出错? 什么原因 Failed? 看了都快疯掉,因是线上环境不好调试,而且有些场景不是每次都能重现。异常最基本要带有上下文信息,包括操作者,操作目标,原因等,最好的异常信息,应给出解决方案,比如上面可以给出:\"从 10.20.16.3 到 10.20.130.20:20880 之间的网络不通,请在 10.20.16.3 使用 telnet 10.20.130.20 20880 测试一下网络,如果是跨机房调用,可能是防火墙阻挡,请联系 SA 开通访问权限\" 等等,上面甚至可以根据 IP 段判断是不是跨机房。另外一个例子,是 spring-web 的 context 加载,如果在 getBean 时 spring 没有被启动,spring 会报一个错,错误信息写着:请在 web.xml 中加入: ......,多好的同学,看到错误的人复制一下就完事了,我们该学学。可以把常见的错误故意犯一遍,看看错误信息能否自我搞定问题, \n或者把平时支持应用时遇到的问题及解决办法都写到异常信息里。 \n日志信息包含环境信息\n每次应用一出错,应用的开发或测试就会把出错信息发过来,询问原因,这时候我都会问一大堆套话,用的哪个版本呀?是生产环境还是开发测试环境?哪个注册中心呀?哪个项目中的?哪台机器呀?哪个服务? 累啊,最主要的是,有些开发或测试人员根本分不清,没办法,只好提供上门服务,浪费的时间可不是浮云,所以,日志中最好把需要的环境信息一并打进去,最好给日志输出做个包装,统一处理掉,免得忘了。包装Logger接口如: \npublic void error(String msg, Throwable e) {  \n    delegate.error(msg + \" on server \" + InetAddress.getLocalHost() + \" using version \" + Version.getVersion(), e);  \n}\n\n获取版本号工具类:\npublic final class Version {  \n\n    private Version() {}  \n\n    private static final Logger logger = LoggerFactory.getLogger(Version.class);  \n\n    private static final Pattern VERSION_PATTERN = Pattern.compile(\"([0-9][0-9\\\\.\\\\-]*)\\\\.jar\");  \n\n    private static final String VERSION = getVersion(Version.class, \"2.0.0\");  \n\n    public static String getVersion(){  \n        return VERSION;  \n    }  \n\n    public static String getVersion(Class cls, String defaultVersion) {  \n        try {  \n            // 首先查找MANIFEST.MF规范中的版本号  \n            String version = cls.getPackage().getImplementationVersion();  \n            if (version == null || version.length() == 0) {  \n                version = cls.getPackage().getSpecificationVersion();  \n            }  \n            if (version == null || version.length() == 0) {  \n                // 如果MANIFEST.MF规范中没有版本号,基于jar包名获取版本号  \n                String file = cls.getProtectionDomain().getCodeSource().getLocation().getFile();  \n                if (file != null &amp;&amp; file.length() &gt; 0 &amp;&amp; file.endsWith(\".jar\")) {  \n                    Matcher matcher = VERSION_PATTERN.matcher(file);  \n                    while (matcher.find() &amp;&amp; matcher.groupCount() &gt; 0) {  \n                        version = matcher.group(1);  \n                    }  \n                }  \n            }  \n            // 返回版本号,如果为空返回缺省版本号  \n            return version == null || version.length() == 0 ? defaultVersion : version;  \n        } catch (Throwable e) { // 防御性容错  \n            // 忽略异常,返回缺省版本号  \n            logger.error(e.getMessage(), e);  \n            return defaultVersion;  \n        }  \n    }  \n\n}\n\nkill 之前先 dump\n每次线上环境一出问题,大家就慌了,通常最直接的办法回滚重启,以减少故障时间,这样现场就被破坏了,要想事后查问题就麻烦了,有些问题必须在线上的大压力下才会发生,线下测试环境很难重现,不太可能让开发或 Appops 在重启前,先手工将出错现场所有数据备份一下,所以最好在 kill 脚本之前调用 dump,进行自动备份,这样就不会有人为疏忽。dump脚本示例:\nJAVA_HOME=/usr/java  \nOUTPUT_HOME=~/output  \nDEPLOY_HOME=`dirname $0`  \nHOST_NAME=`hostname`  \n\nDUMP_PIDS=`ps  --no-heading -C java -f --width 1000 | grep \"$DEPLOY_HOME\" |awk '{print $2}'`  \nif [ -z \"$DUMP_PIDS\" ]; then  \n    echo \"The server $HOST_NAME is not started!\"  \n    exit 1;  \nfi  \n\nDUMP_ROOT=$OUTPUT_HOME/dump  \nif [ ! -d $DUMP_ROOT ]; then  \n    mkdir $DUMP_ROOT  \nfi  \n\nDUMP_DATE=`date +%Y%m%d%H%M%S`  \nDUMP_DIR=$DUMP_ROOT/dump-$DUMP_DATE  \nif [ ! -d $DUMP_DIR ]; then  \n    mkdir $DUMP_DIR  \nfi  \n\necho -e \"Dumping the server $HOST_NAME ...\\c\"  \nfor PID in $DUMP_PIDS ; do  \n    $JAVA_HOME/bin/jstack $PID > $DUMP_DIR/jstack-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jinfo $PID > $DUMP_DIR/jinfo-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jstat -gcutil $PID > $DUMP_DIR/jstat-gcutil-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jstat -gccapacity $PID > $DUMP_DIR/jstat-gccapacity-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jmap $PID > $DUMP_DIR/jmap-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jmap -heap $PID > $DUMP_DIR/jmap-heap-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    $JAVA_HOME/bin/jmap -histo $PID > $DUMP_DIR/jmap-histo-$PID.dump 2>&1  \n    echo -e \".\\c\"  \n    if [ -r /usr/sbin/lsof ]; then  \n    /usr/sbin/lsof -p $PID > $DUMP_DIR/lsof-$PID.dump  \n    echo -e \".\\c\"  \n    fi  \ndone  \nif [ -r /usr/bin/sar ]; then  \n/usr/bin/sar > $DUMP_DIR/sar.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/uptime ]; then  \n/usr/bin/uptime > $DUMP_DIR/uptime.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/free ]; then  \n/usr/bin/free -t > $DUMP_DIR/free.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/vmstat ]; then  \n/usr/bin/vmstat > $DUMP_DIR/vmstat.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/mpstat ]; then  \n/usr/bin/mpstat > $DUMP_DIR/mpstat.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /usr/bin/iostat ]; then  \n/usr/bin/iostat > $DUMP_DIR/iostat.dump  \necho -e \".\\c\"  \nfi  \nif [ -r /bin/netstat ]; then  \n/bin/netstat > $DUMP_DIR/netstat.dump  \necho -e \".\\c\"  \nfi  \necho \"OK!\"\n\n"},"principals/extension.html":{"url":"principals/extension.html","title":"8.7 扩展点重构","keywords":"","body":"扩展点重构\n\nhttp://javatar.iteye.com/blog/1041832\n\n随着服务化的推广,网站对Dubbo服务框架的需求逐渐增多,Dubbo 的现有开发人员能实现的需求有限,很多需求都被 delay,而网站的同学也希望参与进来,加上领域的推动,所以平台计划将部分项目对公司内部开放,让大家一起来实现,Dubbo 为试点项目之一。 \n既然要开放,那 Dubbo 就要留一些扩展点,让参与者尽量黑盒扩展,而不是白盒的修改代码,否则分支,质量,合并,冲突都会很难管理。 \n先看一下 Dubbo 现有的设计:\n\n这里面虽然有部分扩展接口,但并不能很好的协作,而且扩展点的加载和配置都没有统一处理,所以下面对它进行重构。\n第一步,微核心,插件式,平等对待第三方\n即然要扩展,扩展点的加载方式,首先要统一,微核心+插件式,是比较能达到 OCP 原则的思路。\n由一个插件生命周期管理容器,构成微核心,核心不包括任何功能,这样可以确保所有功能都能被替换,并且,框架作者能做到的功能,扩展者也一定要能做到,以保证平等对待第三方,所以,框架自身的功能也要用插件的方式实现,不能有任何硬编码。 \n通常微核心都会采用 Factory、IoC、OSGi 等方式管理插件生命周期。考虑 Dubbo 的适用面,不想强依赖 Spring 等 IoC 容器。自已造一个小的 IoC 容器,也觉得有点过度设计,所以打算采用最简单的 Factory 方式管理插件。 \n最终决定采用的是 JDK 标准的 SPI 扩展机制,参见:java.util.ServiceLoader,也就是扩展者在 jar 包的 META-INF/services/ 目录下放置与接口同名的文本文件,内容为接口实现类名,多个实现类名用换行符分隔。比如,需要扩展 Dubbo 的协议,只需在 xxx.jar 中放置文件:META-INF/services/com.alibaba.dubbo.rpc.Protocol,内容为 com.alibaba.xxx.XxxProtocol。Dubbo 通过 ServiceLoader 扫描到所有 Protocol 实现。 \n并约定所有插件,都必须标注:@Extension(\"name\"),作为加载后的标识性名称,用于配置选择。\n第二步,每个扩展点只封装一个变化因子,最大化复用\n每个扩展点的实现者,往往都只是关心一件事,现在的扩展点,并没有完全分离。比如:Failover, Route, LoadBalance, Directory 没有完全分开,全由 RoutingInvokerGroup 写死了。 \n再比如,协议扩展,扩展者可能只是想替换序列化方式,或者只替换传输方式,并且 Remoting 和 Http 也能复用序列化等实现。这样,需为传输方式,客户端实现,服务器端实现,协议头解析,数据序列化,都留出不同扩展点。 \n拆分后,设计如下:\n\n第三步,全管道式设计,框架自身逻辑,均使用截面拦截实现\n现在很多的逻辑,都是放在基类中实现,然后通过模板方法回调子类的实现,包括:local, mock, generic, echo, token, accesslog, monitor, count, limit 等等,可以全部拆分使用 Filter 实现,每个功能都是调用链上的一环。 比如:(基类模板方法) \npublic abstract AbstractInvoker implements Invoker {  \n\n    public Result invoke(Invocation inv) throws RpcException {  \n        // 伪代码  \n        active ++;  \n        if (active > max)  \n            wait();  \n\n        doInvoke(inv);  \n\n        active --;  \n        notify();  \n    }  \n\n    protected abstract Result doInvoke(Invocation inv) throws RpcException  \n\n}\n\n改成:(链式过滤器)\npublic abstract LimitFilter implements Filter {  \n\n    public Result invoke(Invoker chain, Invocation inv) throws RpcException {  \n         // 伪代码  \n        active ++;  \n        if (active > max)  \n            wait();  \n\n        chain.invoke(inv);  \n\n        active --;  \n        notify();  \n    }  \n\n}\n\n第四步,最少概念,一致性概念模型\n保持尽可能少的概念,有助于理解,对于开放的系统尤其重要。另外,各接口都使用一致的概念模型,能相互指引,并减少模型转换, \n比如,Invoker 的方法签名为: \nResult invoke(Invocation invocation) throws RpcException;\n\n而 Exporter 的方法签名为: \nObject invoke(Method method, Object[] args) throws Throwable;\n\n但它们的作用是一样的,只是一个在客户端,一个在服务器端,却采用了不一样的模型类。\n再比如,URL 以字符串传递,不停的解析和拼装,没有一个 URL 模型类, 而 URL 的参数,却时而 Map, 时而 Parameters 类包装,\nexport(String url)  \ncreateExporter(String host, int port, Parameters params);\n\n使用一致模型:\nexport(URL url)  \ncreateExporter(URL url);\n\n再比如,现有的:Invoker, Exporter, InvocationHandler, FilterChain \n 其实都是 invoke 行为的不同阶段,完全可以抽象掉,统一为 Invoker,减少概念。 \n第五步,分层,组合式扩展,而不是泛化式扩展\n原因参见:谈谈扩充式扩展与增量式扩展。\n泛化式扩展指:将扩展点逐渐抽象,取所有功能并集,新加功能总是套入并扩充旧功能的概念。 \n组合式扩展指:将扩展点正交分解,取所有功能交集,新加功能总是基于旧功能之上实现。 \n上面的设计,不自觉的就将 Dubbo 现有功能都当成了核心功能。上面的概念包含了 Dubbo 现有 RPC 的所有功能,包括:Proxy, Router, Failover, LoadBalance, Subscriber, Publisher, Invoker, Exporter, Filter 等, \n但这些都是核心吗?踢掉哪些,RPC 一样可以 Run?而哪些又是不能踢掉的?基于这样考虑,可以将 RPC 分解成两个层次,只是 Protocol 和 Invoker 才是 RPC 的核心。其它,包括 Router, Failover, Loadbalance, Subscriber, Publisher 都不核心,而是 Routing。所以,将 Routing 作为 Rpc 核心的一个扩展,设计如下:\n\n第六步,整理,梳理关系\n整理后,设计如下:\n\n"},"release.html":{"url":"release.html","title":"9 版本管理","keywords":"","body":"版本管理\n新功能的开发 和 稳定性的提高 对产品都很重要。但是添加新功能会影响稳定性,Dubbo 使用如下的版本开发模式来保障两者。\n2 个版本并行开发\n\nBugFix 版本:低版本,比如 2.4.x。是 GA 版本,线上使用的版本,只会 BugFix,升级第三位版本号。\n新功能版本:高版本,比如 2.5.x。加新功能的版本,会给对新功能有需求的应用试用。\n\n2.5.x 的新功能基本稳定后,进入 2.5.x 试用阶段。找足够多的应用试用 2.5.x 版本。\n在 2.5.x 够稳定后:\n\n2.5.x 成为 GA 版本,只 BugFix,推广使用此版本。如何可行,可以推进应用在期望的时间点内升级到 GA 版本。\n2.4.x 不再开发,应用碰到 Bug 让直接升级。(这个称为“夕阳条款”)\n从 2.5.x 拉成分支 2.6.0,作为新功能开发版本。\n\n优势\n\n保持 GA 版本是稳定的!因为:\n只会作 BugFix\n成为 GA 版本前有试用阶段\n\n\n新功能可以高版本中快速响应,并让应用能试用新功能。\n不会版本过多,导致开发和维护成本剧增\n\n用户要配合的职责\n由于开发只会 BugFix GA 版本,所以用户需要积极跟进升级到 GA 版本,以 Fix 发现的问题。\n定期升级版本用户带来了不安。这是一个假命题,说明如下:\n\nGA 经过一个试用阶段保持稳定。\nGA 版本有 Bug 会火速 Fix\n相对出问题才升级到 GA 版本(可以跨了多个版本)定期升级平摊风险(类似小步快跑)。经历过周期长的大项目的同学会有这样的经历,三方库版本长时间不升级,结果出了问题不得不升级到新版本(跨了多个版本)风险巨大。\n\n"},"contribution.html":{"url":"contribution.html","title":"10 贡献","keywords":"","body":"贡献\n流程\n\n如果是扩展功能,直接新增工程,黑盒依赖 Dubbo 进行扩展。\n如果是改 BUG,或修改框架本身,可以从 Dubb 的 GitHub 上 Fork 工程。\n修改后通过 Push Request 反馈修改。\n\n任务\n\n\n\n功能\n分类\n优先级\n状态\n认领者\n计划完成时间\n进度\n\n\n\n\n《用户指南》翻译\n文档\n高\n未认领\n待定\n待定\n0%\n\n\n《开发指南》翻译\n文档\n高\n未认领\n待定\n待定\n0%\n\n\n扩展点兼容性测试\n测试\n高\n已认领\n罗立树\n待定\n0%\n\n\n性能基准测试\n测试\n高\n未认领\n待定\n待定\n0%\n\n\n功能单元测试\n测试\n高\n未认领\n待定\n待定\n0%\n\n\nJTA/XA分布式事务\n拦截扩展\n高\n未认领\n待定\n待定\n0%\n\n\nThrift\n协议扩展\n高\n开发完成\n闾刚\n2012-04-27\n90%\n\n\nICE\n协议扩展\n高\n未认领\n待定\n待定\n0%\n\n\nACE\n协议扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJSON-RPC\n协议扩展\n低\n未认领\n待定\n待定\n0%\n\n\nXML-RPC\n协议扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJSR181&CXF(WebService)\n协议扩展\n高\n开发完成\n白文志\n2012-04-27\n90%\n\n\nJSR311&JSR339(RestfulWebService)\n协议扩展\n高\n未认领\n待定\n待定\n0%\n\n\nJMS&ActiveMQ\n协议扩展\n高\n未认领\n待定\n待定\n0%\n\n\nProtobuf\n序列化扩展\n高\n调研\n朱启恒\n2012-02-30\n20%\n\n\nAvro\n序列化扩展\n低\n未认领\n待定\n待定\n0%\n\n\nXSocket\n传输扩展\n低\n未认领\n待定\n待定\n0%\n\n\nCGLib\n动态代理扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJNDI\n注册中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nLDAP\n注册中心扩展\n低\n未认领\n待定\n待定\n0%\n\n\nJSR140&SLP\n注册中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nUDDI\n注册中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nJMX\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nSNMP\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nCacti\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nNagios\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nLogstash\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nJRobin\n监控中心扩展\n高\n未认领\n待定\n待定\n0%\n\n\nMaven\n服务安装包仓库\n低\n未认领\n待定\n待定\n0%\n\n\nSubversion\n服务安装包仓库\n低\n未认领\n待定\n待定\n0%\n\n\nJCR/JSR283\n服务安装包仓库\n低\n未认领\n待定\n待定\n0%\n\n\nSimpleDeployer\n本地部署代理\n低\n未认领\n待定\n待定\n0%\n\n\nSimpleScheduler\n资源调度器\n低\n未认领\n待定\n待定\n0%\n\n\n\n"},"checklist.html":{"url":"checklist.html","title":"11 检查列表","keywords":"","body":"检查列表\n发布前 checklist\n\njira ticket 过一遍\nsvn change list\nticket 关联 code\ntest code\nfind bugs\n\n修复时 checklist\n\n修复代码前先建 ticket \n修复代码前先写测试用例\n需要伙伴检查\ntest code(正常流程/异常流程)\n讲一遍逻辑\n契约文档化\n以上内容都写到ticket的评论上\n代码注释写清楚,用中文无妨\n每个版本要有 owner,确保 scope 和 check\n\nPartner Check\n\nPartner 以用户的方式运行一下功能\nPartner 发现问题、添加测试(集成测试)复现总是;Owner 完成实现。(保证两方的时间投入 PatternerCheck 的给予时间保证)\nOwner 向 Partner 讲述一遍实现。\n\n"},"code-smell.html":{"url":"code-smell.html","title":"12 坏味道","keywords":"","body":"坏味道\n这里记录的是 Dubbo 设计或实现不优雅的地方。\nURL 转换\n1. 点对点暴露和引用服务\n直接暴露服务:\nEXPORT(dubbo://provider-address/com.xxx.XxxService?version=1.0.0\")\n点对点直连服务:\nREFER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n2. 通过注册中心暴露服务\n向注册中心暴露服务:\nEXPORT(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&export=ENCODE(dubbo://provider-address/com.xxx.XxxService?version=1.0.0))\n获取注册中心:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\n注册服务地址:\nurl.getParameterAndDecoded(\"export\"))\nREGISTER(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n3. 通过注册中心引用服务\n从注册中心订阅服务:\nREFER(registry://registry-address/com.alibaba.dubbo.registry.RegistrySerevice?registry=dubbo&refer=ENCODE(version=1.0.0))\n获取注册中心:\nurl.setProtocol(url.getParameter(\"registry\", \"dubbo\"))\nGETREGISTRY(dubbo://registry-address/com.alibaba.dubbo.registry.RegistrySerevice)\n订阅服务地址:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nSUBSCRIBE(dubbo://registry-address/com.xxx.XxxService?version=1.0.0)\n通知服务地址:\nurl.addParameters(url.getParameterAndDecoded(\"refer\"))\nNOTIFY(dubbo://provider-address/com.xxx.XxxService?version=1.0.0)\n4. 注册中心推送路由规则\n注册中心路由规则推送:\nNOTIFY(route://registry-address/com.xxx.XxxService?router=script&type=js&rule=ENCODE(function{...}))\n获取路由器:\nurl.setProtocol(url.getParameter(\"router\", \"script\"))\nGETROUTE(script://registry-address/com.xxx.XxxService?type=js&rule=ENCODE(function{...}))\n5. 从文件加载路由规则\n从文件加载路由规则:\nGETROUTE(file://path/file.js?router=script)\n获取路由器:\nurl.setProtocol(url.getParameter(\"router\", \"script\")).addParameter(\"type\", SUFFIX(file)).addParameter(\"rule\", READ(file))\nGETROUTE(script://path/file.js?type=js&rule=ENCODE(function{...}))\n调用参数\n\npath 服务路径\ngroup 服务分组\nversion 服务版本\ndubbo 使用的 dubbo 版本\ntoken 验证令牌\ntimeout 调用超时\n\n扩展点的加载\n1. 自适应扩展点\nExtensionLoader 加载扩展点时,会检查扩展点的属性(通过set方法判断),如该属性是扩展点类型,则会注入扩展点对象。因为注入时不能确定使用哪个扩展点(在使用时确定),所以注入的是一个自适应扩展(一个代理)。自适应扩展点调用时,选取一个真正的扩展点,并代理到其上完成调用。Dubbo 是根据调用方法参数(上面有调用哪个扩展点的信息)来选取一个真正的扩展点。\n在 Dubbo 给定所有的扩展点上调用都有 URL 参数(整个扩展点网的上下文信息)。自适应扩展即是从 URL 确定要调用哪个扩展点实现。URL 哪个 Key 的 Value 用来确定使用哪个扩展点,这个信息通过的 @Adaptive 注解在方法上说明。\n@Extension\npublic interface Car {\n    @Adaptive({\"http://10.20.160.198/wiki/display/dubbo/car.type\", \"http://10.20.160.198/wiki/display/dubbo/transport.type\"})\n    public run(URL url, Type1 arg1, Type2 arg2);\n}\n\n由于自适应扩展点的上面的约定,ExtensionLoader 会为扩展点自动生成自适应扩展点类(通过字节码),并将其实例注入。\nExtensionLoader 生成的自适应扩展点类如下:\npackage ;\n\npublic class $Adpative implements  {\n    public () {\n        if(是否有URL类型方法参数?) 使用该URL参数\n        else if(是否有方法类型上有URL属性) 使用该URL属性\n        # \n\n        if(获取的URL == null) {\n            throw new IllegalArgumentException(\"url == null\");\n        }\n\n        根据@Adaptive注解上声明的Key的顺序,从URL获致Value,作为实际扩展点名。\n        如URL没有Value,则使用缺省扩展点实现。如没有扩展点, throw new IllegalStateException(\"Fail to get extension\");\n\n        在扩展点实现调用该方法,并返回结果。\n    }\n\n    public () {\n        throw new UnsupportedOperationException(\"is not adaptive method!\");\n    }\n}\n\n@Adaptive 注解使用如下:\n如果 URL 这些 Key 都没有 Value,使用缺省的扩展(在接口的 Default 中设定的值)。比如,String[] {\"key1\", \"key2\"},表示先在 URL 上找 key1 的 Value 作为要 Adapt 成的 Extension 名;key1 没有 Value,则使用 key2 的 Value 作为要 Adapt 成的 Extension 名。 key2 没有 Value,使用缺省的扩展。如果没有设定缺省扩展,则方法调用会抛出 IllegalStateException。如果不设置则缺省使用 Extension 接口类名的点分隔小写字串。即对于 Extension 接口 com.alibaba.dubbo.xxx.YyyInvokerWrapper 的缺省值为 new String[] {\"yyy.invoker.wrapper\"}\nCallback 功能\n1. 参数回调\n主要原理: 在一个 consumer->provider 的长连接上,自动在 Consumer 端暴露一个服务(实现方法参数上声明的接口A),provider 端便可反向调用到 consumer 端的接口实例。\n实现细节:\n\n为了在传输时能够对回调接口实例进行转换,自动暴露与自动引用目前在 DubboCodec 中实现。此处需要考虑将此逻辑与 codec 逻辑分离。\n在根据 invocation 信息获取 exporter 时,需要判断是否是回调,如果是回调,会从 attachments 中取得回调服务实例的 id,在获取 exporter,此处用于 consumer 端可以对同一个 callback 接口做不同的实现。\n\n2. 事件通知\n主要原理:Consumer 在 invoke 方法时,判断如果有配置 onreturn/onerror... 则将 onreturn 对应的参数值(实例方法)加入到异步调用的回调列表中。\n实现细节:参数的传递采用 URL,但 URL 中没有支持 string-object,所以将实例方法存储在 staticMap 中,此处实现需要进行改造。\nLazy连接\nDubboProtocol 特有功能,默认关闭。\n当客户端与服务端创建代理时,暂不建立 tcp 长连接,当有数据请求时在做连接初始化。\n此项功能自动关闭连接重试功能,开启发送重试功能(即发送数据时如果连接已断开,尝试重新建立连接)\n共享连接\nDubboProtocol 特有功能,默认开启。\nJVM A 暴露了多个服务,JVM B 引用了 A 中的多个服务,共享连接是说 A 与 B 多个服务调用是通过同一个 TCP 长连接进行数据传输,已达到减少服务端连接数的目的.\n实现细节:对于同一个地址由于使用了共享连接,那 invoker 的 destroy 就需要特别注意,一方面要满足对同一个地址 refer 的 invoker 全部 destroy 后,连接需要关闭,另一方面还需要注意如何避免部分 invoker destroy 时不能关闭连接。在实现中采用了引用计数的方案,但为了防范,在连接关闭时,重新建立了一个 Lazy connection (称为幽灵连接), 用于当出现异常场景时,避免影响业务逻辑的正常调用.\nsticky 策略\n有多个服务提供者的情况下,配置了 sticky 后,在提供者可用的情况下,调用会继续发送到上一次的服务提供者。sticky 策略默认开启了连接的 lazy 选项, 用于避免开启无用的连接.\n服务提供者选择逻辑\n\n存在多个服务提供者的情况下,首先根据 Loadbalance 进行选择,如果选择的 provider 处于可用状态,则进行后续调用\n如果第一步选择的服务提供者不可用,则从剩余服务提供者列表中继续选择,如果可用,进行后续调用\n如果所有的服务提供者都不可用,重新遍历整个列表(优先从没有选过的列表中选择),判断是否有可用的服务提供者(选择过程中,不可用的服务提供者可能会恢复到可用状态),如果有,则进行后续调用\n如果第三步没有选择出可用的服务提供者,会选第一步选出的 invoker 中的下一个(如果不是最后一个),避免碰撞。\n\n"},"TCK.html":{"url":"TCK.html","title":"13 技术兼容性测试","keywords":"","body":"技术兼容性测试\nDubbo 的协议,通讯,序列化,注册中心,负载均策等扩展点,都有多种可选策略,以应对不同应用场景,而我们的测试用例很分散,当用户自己需要加一种新的实现时,总是不确定能否满足扩展点的完整契约。\n所以,我们需要对核心扩展点写 TCK (Technology Compatibility Kit),用户增加一种扩展实现,只需通过 TCK,即可确保与框架的其它部分兼容运行,可以有效提高整体健状性,也方便第三方扩展者接入,加速开源社区的成熟。\n开源社区的行知同学已着手研究这一块,他的初步想法是借鉴 JBoss 的 CDI-TCK,做一个 Dubbo 的 TCK 基础框架,在此之上实现 Dubbo 的扩展点 TCK 用例。\n参见:http://docs.jboss.org/cdi/tck/reference/1.0.1-Final/html/introduction.html\n如果大家有兴趣,也可以一起研究,和行知一块讨论。\nProtocol TCK\n\nTODO\n\nRegistry TCK\n\nTODO\n\n"}}}
\ No newline at end of file
diff --git a/books/dubbo-user-book-en/benchmark-tool.html b/books/dubbo-user-book-en/benchmark-tool.html
new file mode 100644
index 00000000..75c9b13a
--- /dev/null
+++ b/books/dubbo-user-book-en/benchmark-tool.html
@@ -0,0 +1,105 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <title>Apache Dubbo (incubating)</title>
+<!-- Begin Jekyll SEO tag v2.3.0 -->
+<title>Beanchmark testing tool installer | Apache Dubbo (incubating)</title>
+<meta property="og:title" content="Beanchmark testing tool installer" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:site_name" content="Apache Dubbo (incubating)" />
+<script type="application/ld+json">
+{"name":null,"description":"Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.","author":null,"@type":"WebPage","url":"/books/dubbo-user-book-en/benchmark-tool.html","publisher":null,"image":null,"headline":"Beanchmark testing tool installer","dateModified":null,"datePublished":null,"sameAs":null,"mainEntityOfPage":null,"@context":"http://schema.org"}</script>
+<!-- End Jekyll SEO tag -->
+
+    <meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework."/>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="theme-color" content="#157878">
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="/assets/css/style.css?v=5e4e78ddaf4ea9e9a1a5bb0ded1eae4ac241ca64">
+      <!--<script>-->
+      <!--var _hmt = _hmt || [];-->
+      <!--(function() {-->
+      <!--var hm = document.createElement("script");-->
+      <!--hm.src = "https://hm.baidu.com/hm.js?5d37fba14b64e6bc8e0be39b4a08a59d";-->
+      <!--var s = document.getElementsByTagName("script")[0]; -->
+      <!--s.parentNode.insertBefore(hm, s);-->
+      <!--})();-->
+      <!--</script>-->
+  </head>
+  <body>
+    <section class="page-header">
+      <h1 class="project-name"><a href="http://www.apache.org"><img src="images//asf-feather.svg" title="Apache Software Foundation" alt="Apache Software Foundation" style="width: 50px;vertical-align: bottom;" /></a>Apache Dubbo (incubating)</h1>
+      <h2 class="project-tagline">Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.</h2>
+      
+        <a href="https://github.com/apache/incubator-dubbo" class="btn">View on GitHub</a>
+      
+      
+    </section>
+
+    <section class="main-content">
+      <h1 id="beanchmark-testing-tool-installer">Beanchmark testing tool installer</h1>
+
+<p>Download the <a href="http://code.alibabatech.com/wiki/download/attachments/7669075/dubbo.benchmark-2.0.14.tar.gz">benchmark installer</a>,and unzip it</p>
+
+<p>Read ReadMe.txt (the contents are as follows, in the compressed package.)</p>
+
+<ul>
+  <li>
+    <p>Build a new benchmark project, such as demo.benchmark</p>
+  </li>
+  <li>
+    <p>Import the your own interface api jar and dubbo.benchmark.jar (Unzip dubbo.benchmark.tar.gz, under the lib directory )</p>
+  </li>
+  <li>
+    <p>Create a new class to implement AbstractClientRunnable</p>
+
+    <ul>
+      <li>Implement the constructor of the parent class</li>
+      <li>Implement the invoke method and create a local interface proxy by serviceFactory,and finish your own business logic, as follows:</li>
+    </ul>
+
+    <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>      <span class="kd">public</span> <span class="n">Object</span> <span class="nf">invoke</span><span class="o">(</span><span class="n">ServiceFactory</span> <span class="n">serviceFactory</span><span class="o">)</span> <span class="o">{</span>
+          <span class="n">DemoService</span> <span class="n">demoService</span> <span class="o">=</span> <span class="o">(</span><span class="n">DemoService</span><span class="o">)</span> <span class="n">serviceFactory</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="n">DemoService</span><span class="o">.</span><span class="na">class</span><span class="o">);</span>
+          <span class="k">return</span> <span class="n">demoService</span><span class="o">.</span><span class="na">sendRequest</span><span class="o">(</span><span class="s">"hello"</span><span class="o">);</span>
+      <span class="o">}</span>
+</code></pre></div>    </div>
+  </li>
+  <li>
+    <p>Make your own benchmark project into a jar package, such as demo.benchmark.jar</p>
+  </li>
+  <li>
+    <p>Put the demo.benchmark.jar and service API jar into directory dubbo.benchmark/lib</p>
+  </li>
+  <li>
+    <p>Configuring duubo.properties</p>
+  </li>
+  <li>
+    <p>Run run.bat(windows) or run.sh(linux)</p>
+  </li>
+</ul>
+
+<p>If you want to test the different versions of Dubbo, you can replace the jar of the Dubbo.</p>
+
+
+
+      <footer class="site-footer">
+          <span class="site-footer-credits">Copyright © 2018 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</span>
+      </footer>
+    </section>
+
+    
+      <script type="text/javascript">
+        (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-112489517-1', 'auto');
+        ga('send', 'pageview');
+      </script>
+    
+  </body>
+</html>
diff --git a/books/dubbo-user-book-en/benchmark-tool.md b/books/dubbo-user-book-en/benchmark-tool.md
index e74d781a..b64112e8 100644
--- a/books/dubbo-user-book-en/benchmark-tool.md
+++ b/books/dubbo-user-book-en/benchmark-tool.md
@@ -1,6 +1,8 @@
 # Beanchmark testing tool installer
 
-Download the [benchmark installer](http://code.alibabatech.com/wiki/download/attachments/7669075/dubbo.benchmark-2.0.14.tar.gz),and unzip it 
+* download: git clone https://github.com/apache/incubator-dubbo.git  
+* compile benchmark: cd incubator-dubbo/dubbo-test/dubbo-test-benchmark; mvn clean install  
+* uncompress benchmark: incubator-dubbo/dubbo-test/dubbo-test-benchmark/target/dubbo-test-benchmark-2.6.2-SNAPSHOT.tar.gz 
 
 Read ReadMe.txt (the contents are as follows, in the compressed package.)
 
diff --git a/books/dubbo-user-book-en/best-practice.html b/books/dubbo-user-book-en/best-practice.html
index 9017d608..de1badf0 100644
--- a/books/dubbo-user-book-en/best-practice.html
+++ b/books/dubbo-user-book-en/best-practice.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="demos/service-donwngrade.html">
             
-                <span>
+                <a href="demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1409,7 +1401,7 @@ <h2 id="granularity">Granularity</h2>
 <p>The service interface recommends the division of the business scene as a unit and abstract the similar business to prevent the explosion of the number of interfaces.</p>
 <p>It is not recommended to use an too abstract universal interface, such as Map query (Map), which has no explicit semantics, which will inconvenience later maintenance.</p>
 <h2 id="version">Version</h2>
-<p>Each interface should define a version number to provide possible subsequent incompatible upgrades,eg: <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.XxxService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">version</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>1.0<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code>&#x3002;</p>
+<p>Each interface should define a version number to provide possible subsequent incompatible upgrades,eg: <code>&lt;dubbo:service interface=&quot;com.xxx.XxxService&quot; version=&quot;1.0&quot; /&gt;</code>&#x3002;</p>
 <p>It is recommended to use a two bit version number, because the third - bit version number is usually compatible with a compatible upgrade, and a change of service version is required only when incompatible.</p>
 <p>When incompatible, half of the provider is upgraded to a new version, and all the consumers are upgraded to a new version, and the remaining half providers are upgraded to a new version.</p>
 <h2 id="compatibility">Compatibility</h2>
@@ -1475,7 +1467,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"13 Servitization best practice","level":"1.14","depth":1,"next":{"title":"14 Recommended usage","level":"1.15","depth":1,"path":"recommend.md","ref":"./recommend.md","articles":[]},"previous":{"title":"12 maven plugins","level":"1.13","depth":1,"path":"references/maven.md","ref":"./references/maven.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"best-practice.md","mtime":"2017-12-26T02:28:31.605Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"13 Servitization best practice","level":"1.14","depth":1,"next":{"title":"14 Recommended usage","level":"1.15","depth":1,"path":"recommend.md","ref":"./recommend.md","articles":[]},"previous":{"title":"12 maven plugins","level":"1.13","depth":1,"path":"references/maven.md","ref":"./references/maven.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"best-practice.md","mtime":"2018-03-19T06:46:50.935Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
@@ -1485,30 +1477,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/capacity-plan.html b/books/dubbo-user-book-en/capacity-plan.html
index 48fee779..b9215927 100644
--- a/books/dubbo-user-book-en/capacity-plan.html
+++ b/books/dubbo-user-book-en/capacity-plan.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="demos/service-donwngrade.html">
             
-                <span>
+                <a href="demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1459,7 +1451,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"15 Capacity plan","level":"1.16","depth":1,"next":{"title":"16 Performance testing reports","level":"1.17","depth":1,"path":"perf-test.md","ref":"./perf-test.md","articles":[]},"previous":{"title":"14 Recommended usage","level":"1.15","depth":1,"path":"recommend.md","ref":"./recommend.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"capacity-plan.md","mtime":"2017-12-26T02:28:31.605Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"15 Capacity plan","level":"1.16","depth":1,"next":{"title":"16 Performance testing reports","level":"1.17","depth":1,"path":"perf-test.md","ref":"./perf-test.md","articles":[]},"previous":{"title":"14 Recommended usage","level":"1.15","depth":1,"path":"recommend.md","ref":"./recommend.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"capacity-plan.md","mtime":"2018-03-19T06:46:50.936Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
@@ -1469,30 +1461,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/configuration/annotation.html b/books/dubbo-user-book-en/configuration/annotation.html
index d285c493..4c502957 100644
--- a/books/dubbo-user-book-en/configuration/annotation.html
+++ b/books/dubbo-user-book-en/configuration/annotation.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="../demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="../demos/service-donwngrade.html">
             
-                <span>
+                <a href="../demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1404,87 +1396,87 @@ <h1 id="annotation-configuration">Annotation Configuration</h1>
 <p> Requires<code>2.5.7</code> or higher</p>
 <h2 id="provider-side">Provider Side</h2>
 <h3 id="service-annotation-for-exporting"><code>Service</code> annotation for exporting</h3>
-<pre class="language-"><code class="lang-java"><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>config<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Service<span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-keyword">import</span> com.alibaba.dubbo.config.annotation.Service;
 
-<span class="token annotation punctuation">@Service</span><span class="token punctuation">(</span>timeout <span class="token operator">=</span> <span class="token number">5000</span><span class="token punctuation">)</span>
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AnnotateServiceImpl</span> <span class="token keyword">implements</span> <span class="token class-name">AnnotateService</span> <span class="token punctuation">{</span> 
-    <span class="token comment" spellcheck="true">// ...</span>
-<span class="token punctuation">}</span>
+<span class="hljs-meta">@Service</span>(timeout = <span class="hljs-number">5000</span>)
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AnnotateServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">AnnotateService</span> </span>{ 
+    <span class="hljs-comment">// ...</span>
+}
 </code></pre>
 <h3 id="use-javaconfig-for-common-parts">Use JavaConfig for common parts</h3>
-<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Configuration</span>
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">DubboConfiguration</span> <span class="token punctuation">{</span>
-
-    <span class="token annotation punctuation">@Bean</span>
-    <span class="token keyword">public</span> ApplicationConfig <span class="token function">applicationConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        ApplicationConfig applicationConfig <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ApplicationConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        applicationConfig<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">&quot;provider-test&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token keyword">return</span> applicationConfig<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-
-    <span class="token annotation punctuation">@Bean</span>
-    <span class="token keyword">public</span> RegistryConfig <span class="token function">registryConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        RegistryConfig registryConfig <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RegistryConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        registryConfig<span class="token punctuation">.</span><span class="token function">setAddress</span><span class="token punctuation">(</span><span class="token string">&quot;zookeeper://127.0.0.1:2181&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        registryConfig<span class="token punctuation">.</span><span class="token function">setClient</span><span class="token punctuation">(</span><span class="token string">&quot;curator&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token keyword">return</span> registryConfig<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-meta">@Configuration</span>
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DubboConfiguration</span> </span>{
+
+    <span class="hljs-meta">@Bean</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> ApplicationConfig <span class="hljs-title">applicationConfig</span><span class="hljs-params">()</span> </span>{
+        ApplicationConfig applicationConfig = <span class="hljs-keyword">new</span> ApplicationConfig();
+        applicationConfig.setName(<span class="hljs-string">&quot;provider-test&quot;</span>);
+        <span class="hljs-keyword">return</span> applicationConfig;
+    }
+
+    <span class="hljs-meta">@Bean</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> RegistryConfig <span class="hljs-title">registryConfig</span><span class="hljs-params">()</span> </span>{
+        RegistryConfig registryConfig = <span class="hljs-keyword">new</span> RegistryConfig();
+        registryConfig.setAddress(<span class="hljs-string">&quot;zookeeper://127.0.0.1:2181&quot;</span>);
+        registryConfig.setClient(<span class="hljs-string">&quot;curator&quot;</span>);
+        <span class="hljs-keyword">return</span> registryConfig;
+    }
+}
 </code></pre>
 <h3 id="path-to-scan">Path to scan</h3>
-<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@SpringBootApplication</span>
-<span class="token annotation punctuation">@DubboComponentScan</span><span class="token punctuation">(</span>basePackages <span class="token operator">=</span> <span class="token string">&quot;com.alibaba.dubbo.test.service.impl&quot;</span><span class="token punctuation">)</span>
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ProviderTestApp</span> <span class="token punctuation">{</span>
-    <span class="token comment" spellcheck="true">// ...</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-meta">@SpringBootApplication</span>
+<span class="hljs-meta">@DubboComponentScan</span>(basePackages = <span class="hljs-string">&quot;com.alibaba.dubbo.test.service.impl&quot;</span>)
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ProviderTestApp</span> </span>{
+    <span class="hljs-comment">// ...</span>
+}
 </code></pre>
 <h2 id="consumer-side">Consumer Side</h2>
 <h3 id="reference-annotation-for-reference"><code>Reference</code> annotation for reference</h3>
-<pre class="language-"><code class="lang-java"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">AnnotationConsumeService</span> <span class="token punctuation">{</span>
+<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">AnnotationConsumeService</span> </span>{
 
-    <span class="token annotation punctuation">@com</span><span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>config<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Reference
-    <span class="token keyword">public</span> AnnotateService annotateService<span class="token punctuation">;</span>
+    <span class="hljs-meta">@com</span>.alibaba.dubbo.config.annotation.Reference
+    <span class="hljs-keyword">public</span> AnnotateService annotateService;
 
-    <span class="token comment" spellcheck="true">// ...</span>
-<span class="token punctuation">}</span>
+    <span class="hljs-comment">// ...</span>
+}
 </code></pre>
 <h3 id="use-javaconfig-for-common-parts">Use JavaConfig for common parts</h3>
-<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@Configuration</span>
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">DubboConfiguration</span> <span class="token punctuation">{</span>
-
-    <span class="token annotation punctuation">@Bean</span>
-    <span class="token keyword">public</span> ApplicationConfig <span class="token function">applicationConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        ApplicationConfig applicationConfig <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ApplicationConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        applicationConfig<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">&quot;consumer-test&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token keyword">return</span> applicationConfig<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-
-    <span class="token annotation punctuation">@Bean</span>
-    <span class="token keyword">public</span> ConsumerConfig <span class="token function">consumerConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        ConsumerConfig consumerConfig <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConsumerConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        consumerConfig<span class="token punctuation">.</span><span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token number">3000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token keyword">return</span> consumerConfig<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-
-    <span class="token annotation punctuation">@Bean</span>
-    <span class="token keyword">public</span> RegistryConfig <span class="token function">registryConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        RegistryConfig registryConfig <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RegistryConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        registryConfig<span class="token punctuation">.</span><span class="token function">setAddress</span><span class="token punctuation">(</span><span class="token string">&quot;zookeeper://127.0.0.1:2181&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        registryConfig<span class="token punctuation">.</span><span class="token function">setClient</span><span class="token punctuation">(</span><span class="token string">&quot;curator&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token keyword">return</span> registryConfig<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-meta">@Configuration</span>
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DubboConfiguration</span> </span>{
+
+    <span class="hljs-meta">@Bean</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> ApplicationConfig <span class="hljs-title">applicationConfig</span><span class="hljs-params">()</span> </span>{
+        ApplicationConfig applicationConfig = <span class="hljs-keyword">new</span> ApplicationConfig();
+        applicationConfig.setName(<span class="hljs-string">&quot;consumer-test&quot;</span>);
+        <span class="hljs-keyword">return</span> applicationConfig;
+    }
+
+    <span class="hljs-meta">@Bean</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> ConsumerConfig <span class="hljs-title">consumerConfig</span><span class="hljs-params">()</span> </span>{
+        ConsumerConfig consumerConfig = <span class="hljs-keyword">new</span> ConsumerConfig();
+        consumerConfig.setTimeout(<span class="hljs-number">3000</span>);
+        <span class="hljs-keyword">return</span> consumerConfig;
+    }
+
+    <span class="hljs-meta">@Bean</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> RegistryConfig <span class="hljs-title">registryConfig</span><span class="hljs-params">()</span> </span>{
+        RegistryConfig registryConfig = <span class="hljs-keyword">new</span> RegistryConfig();
+        registryConfig.setAddress(<span class="hljs-string">&quot;zookeeper://127.0.0.1:2181&quot;</span>);
+        registryConfig.setClient(<span class="hljs-string">&quot;curator&quot;</span>);
+        <span class="hljs-keyword">return</span> registryConfig;
+    }
+}
 </code></pre>
 <h3 id="path-to-scan">Path to scan</h3>
-<pre class="language-"><code class="lang-java"><span class="token annotation punctuation">@SpringBootApplication</span>
-<span class="token annotation punctuation">@DubboComponentScan</span><span class="token punctuation">(</span>basePackages <span class="token operator">=</span> <span class="token string">&quot;com.alibaba.dubbo.test.service&quot;</span><span class="token punctuation">)</span>
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ConsumerTestApp</span> <span class="token punctuation">{</span>
-    <span class="token comment" spellcheck="true">// ...</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-meta">@SpringBootApplication</span>
+<span class="hljs-meta">@DubboComponentScan</span>(basePackages = <span class="hljs-string">&quot;com.alibaba.dubbo.test.service&quot;</span>)
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ConsumerTestApp</span> </span>{
+    <span class="hljs-comment">// ...</span>
+}
 </code></pre>
 <h2 id="notes">NOTES</h2>
 <p>All annotations in 2.5.7 will be removed later, if you have used these annotations in your project, please upgrade to the latest version.</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>annotation</span> <span class="token attr-name">package</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.dubbo.test.service<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:annotation</span> <span class="hljs-attr">package</span>=<span class="hljs-string">&quot;com.alibaba.dubbo.test.service&quot;</span> /&gt;</span>
 </code></pre>
 
                                 
@@ -1529,7 +1521,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"next":{"title":"6 Demos","level":"1.7","depth":1,"path":"demos/index.md","ref":"./demos/index.md","articles":[{"title":"6.1 Start check","level":"1.7.1","depth":2,"path":"demos/preflight-check.md","ref":"./demos/preflight-check.md","articles":[]},{"title":"6.2 Fault-tolerent strategy","level":"1.7.2","depth":2,"path":"demos/fault-tolerent-strategy.md","ref":"./demos/fault-tolerent-strategy.md","articles":[]},{"title":"6.3 Load balance","level":"1.7.3","depth":2,"path":"demos/loadbalance.md","ref":"./demos/loadbalance.md","articles":[]},{"title":"6.4 Thread model","level":"1.7.4","depth":2,"path":"demos/thread-model.md","ref":"./demos/thread-model.md","articles":[]},{"title":"6.5 Connecting certain provider straightly","level":"1.7.5","depth":2,"path":"demos/explicit-target.md","ref":"./demos/explicit-target.md","articles":[]},{"title":"6.6 Subscribe only","level":"1.7.6","depth":2,"path":"demos/subscribe-only.md","ref":"./demos/subscribe-only.md","articles":[]},{"title":"6.7 Registry only","level":"1.7.7","depth":2,"path":"demos/registry-only.md","ref":"./demos/registry-only.md","articles":[]},{"title":"6.8 Static service","level":"1.7.8","depth":2,"path":"demos/static-service.md","ref":"./demos/static-service.md","articles":[]},{"title":"6.9 Multi-protocols","level":"1.7.9","depth":2,"path":"demos/multi-protocols.md","ref":"./demos/multi-protocols.md","articles":[]},{"title":"6.10 Multi-registries","level":"1.7.10","depth":2,"path":"demos/multi-registry.md","ref":"./demos/multi-registry.md","articles":[]},{"title":"6.11 Service group","level":"1.7.11","depth":2,"path":"demos/service-group.md","ref":"./demos/service-group.md","articles":[]},{"title":"6.12 Multi-versions","level":"1.7.12","depth":2,"path":"demos/multi-versions.md","ref":"./demos/multi-versions.md","articles":[]},{"title":"6.13 Group merger","level":"1.7.13","depth":2,"path":"demos/group-merger.md","ref":"./demos/group-merger.md","articles":[]},{"title":"6.14 Parameter validation","level":"1.7.14","depth":2,"path":"demos/parameter-validation.md","ref":"./demos/parameter-validation.md","articles":[]},{"title":"6.15 Result cache","level":"1.7.15","depth":2,"path":"demos/result-cache.md","ref":"./demos/result-cache.md","articles":[]},{"title":"6.16 Generic reference","level":"1.7.16","depth":2,"path":"demos/generic-reference.md","ref":"./demos/generic-reference.md","articles":[]},{"title":"6.17 Generic service","level":"1.7.17","depth":2,"path":"demos/generic-service.md","ref":"./demos/generic-service.md","articles":[]},{"title":"6.18 Echo service","level":"1.7.18","depth":2,"path":"demos/echo-service.md","ref":"./demos/echo-service.md","articles":[]},{"title":"6.19 Context","level":"1.7.19","depth":2,"path":"demos/context.md","ref":"./demos/context.md","articles":[]},{"title":"6.20 Attachment","level":"1.7.20","depth":2,"path":"demos/attachment.md","ref":"./demos/attachment.md","articles":[]},{"title":"6.21 Asynchronous call","level":"1.7.21","depth":2,"path":"demos/async-call.md","ref":"./demos/async-call.md","articles":[]},{"title":"6.22 Local call","level":"1.7.22","depth":2,"path":"demos/local-call.md","ref":"./demos/local-call.md","articles":[]},{"title":"6.23 Callback parameter","level":"1.7.23","depth":2,"path":"demos/callback-parameter.md","ref":"./demos/callback-parameter.md","articles":[]},{"title":"6.24 Events notify","level":"1.7.24","depth":2,"path":"demos/events-notify.md","ref":"./demos/events-notify.md","articles":[]},{"title":"6.25 Local stub","level":"1.7.25","depth":2,"path":"demos/local-stub.md","ref":"./demos/local-stub.md","articles":[]},{"title":"6.26 Local mock","level":"1.7.26","depth":2,"path":"demos/local-mock.md","ref":"./demos/local-mock.md","articles":[]},{"title":"6.27 Delay publish","level":"1.7.27","depth":2,"path":"demos/delay-publish.md","ref":"./demos/delay-publish.md","articles":[]},{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"path":"demos/concurrency-control.md","ref":"./demos/concurrency-control.md","articles":[]},{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"path":"demos/config-connections.md","ref":"./demos/config-connections.md","articles":[]},{"title":"6.30 Lazy connect","level":"1.7.30","depth":2,"path":"demos/lazy-connect.md","ref":"./demos/lazy-connect.md","articles":[]},{"title":"6.31 Stickness connections","level":"1.7.31","depth":2,"path":"demos/stickiness.md","ref":"./demos/stickiness.md","articles":[]},{"title":"6.32 Token authorization","level":"1.7.32","depth":2,"path":"demos/token-authorization.md","ref":"./demos/token-authorization.md","articles":[]},{"title":"6.33 Routing rule","level":"1.7.33","depth":2,"path":"demos/routing-rule.md","ref":"./demos/routing-rule.md","articles":[]},{"title":"6.34 Configuration rule","level":"1.7.34","depth":2,"path":"demos/config-rule.md","ref":"./demos/config-rule.md","articles":[]},{"title":"6.35 Service downgrade","level":"1.7.35","depth":2,"path":"demos/service-downgrade.md","ref":"./demos/service-downgrade.md","articles":[]},{"title":"6.36 Graceful shutdown","level":"1.7.36","depth":2,"path":"demos/graceful-shutdown.md","ref":"./demos/graceful-shutdown.md","articles":[]},{"title":"6.37 Hostname binding ","level":"1.7.37","depth":2,"path":"demos/hostname-binding.md","ref":"./demos/hostname-binding.md","articles":[]},{"title":"6.38 Logger strategy","level":"1.7.38","depth":2,"path":"demos/logger-strategy.md","ref":"./demos/logger-strategy.md","articles":[]},{"title":"6.39 Accesslog","level":"1.7.39","depth":2,"path":"demos/accesslog.md","ref":"./demos/accesslog.md","articles":[]},{"title":"6.40 Service container","level":"1.7.40","depth":2,"path":"demos/service-container.md","ref":"./demos/service-container.md","articles":[]},{"title":"6.41 Reference config cache","level":"1.7.41","depth":2,"path":"demos/reference-config-cache.md","ref":"./demos/reference-config-cache.md","articles":[]},{"title":"6.42 Distributed transaction","level":"1.7.42","depth":2,"path":"demos/distributed-transaction.md","ref":"./demos/distributed-transaction.md","articles":[]},{"title":"6.43 Dumping thread stack automatically","level":"1.7.43","depth":2,"path":"demos/dump.md","ref":"./demos/dump.md","articles":[]},{"title":"6.44 Netty4","level":"1.7.44","depth":2,"path":"demos/netty4.md","ref":"./demos/netty4.md","articles":[]}]},"previous":{"title":"5.3 API configuration","level":"1.6.3","depth":2,"path":"configuration/api.md","ref":"./configuration/api.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/annotation.md","mtime":"2017-12-26T02:28:31.606Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"next":{"title":"6 Demos","level":"1.7","depth":1,"path":"demos/index.md","ref":"./demos/index.md","articles":[{"title":"6.1 Start check","level":"1.7.1","depth":2,"path":"demos/preflight-check.md","ref":"./demos/preflight-check.md","articles":[]},{"title":"6.2 Fault-tolerent strategy","level":"1.7.2","depth":2,"path":"demos/fault-tolerent-strategy.md","ref":"./demos/fault-tolerent-strategy.md","articles":[]},{"title":"6.3 Load balance","level":"1.7.3","depth":2,"path":"demos/loadbalance.md","ref":"./demos/loadbalance.md","articles":[]},{"title":"6.4 Thread model","level":"1.7.4","depth":2,"path":"demos/thread-model.md","ref":"./demos/thread-model.md","articles":[]},{"title":"6.5 Connecting certain provider straightly","level":"1.7.5","depth":2,"path":"demos/explicit-target.md","ref":"./demos/explicit-target.md","articles":[]},{"title":"6.6 Subscribe only","level":"1.7.6","depth":2,"path":"demos/subscribe-only.md","ref":"./demos/subscribe-only.md","articles":[]},{"title":"6.7 Registry only","level":"1.7.7","depth":2,"path":"demos/registry-only.md","ref":"./demos/registry-only.md","articles":[]},{"title":"6.8 Static service","level":"1.7.8","depth":2,"path":"demos/static-service.md","ref":"./demos/static-service.md","articles":[]},{"title":"6.9 Multi-protocols","level":"1.7.9","depth":2,"path":"demos/multi-protocols.md","ref":"./demos/multi-protocols.md","articles":[]},{"title":"6.10 Multi-registries","level":"1.7.10","depth":2,"path":"demos/multi-registry.md","ref":"./demos/multi-registry.md","articles":[]},{"title":"6.11 Service group","level":"1.7.11","depth":2,"path":"demos/service-group.md","ref":"./demos/service-group.md","articles":[]},{"title":"6.12 Multi-versions","level":"1.7.12","depth":2,"path":"demos/multi-versions.md","ref":"./demos/multi-versions.md","articles":[]},{"title":"6.13 Group merger","level":"1.7.13","depth":2,"path":"demos/group-merger.md","ref":"./demos/group-merger.md","articles":[]},{"title":"6.14 Parameter validation","level":"1.7.14","depth":2,"path":"demos/parameter-validation.md","ref":"./demos/parameter-validation.md","articles":[]},{"title":"6.15 Result cache","level":"1.7.15","depth":2,"path":"demos/result-cache.md","ref":"./demos/result-cache.md","articles":[]},{"title":"6.16 Generic reference","level":"1.7.16","depth":2,"path":"demos/generic-reference.md","ref":"./demos/generic-reference.md","articles":[]},{"title":"6.17 Generic service","level":"1.7.17","depth":2,"path":"demos/generic-service.md","ref":"./demos/generic-service.md","articles":[]},{"title":"6.18 Echo service","level":"1.7.18","depth":2,"path":"demos/echo-service.md","ref":"./demos/echo-service.md","articles":[]},{"title":"6.19 Context","level":"1.7.19","depth":2,"path":"demos/context.md","ref":"./demos/context.md","articles":[]},{"title":"6.20 Attachment","level":"1.7.20","depth":2,"path":"demos/attachment.md","ref":"./demos/attachment.md","articles":[]},{"title":"6.21 Asynchronous call","level":"1.7.21","depth":2,"path":"demos/async-call.md","ref":"./demos/async-call.md","articles":[]},{"title":"6.22 Local call","level":"1.7.22","depth":2,"path":"demos/local-call.md","ref":"./demos/local-call.md","articles":[]},{"title":"6.23 Callback parameter","level":"1.7.23","depth":2,"path":"demos/callback-parameter.md","ref":"./demos/callback-parameter.md","articles":[]},{"title":"6.24 Events notify","level":"1.7.24","depth":2,"path":"demos/events-notify.md","ref":"./demos/events-notify.md","articles":[]},{"title":"6.25 Local stub","level":"1.7.25","depth":2,"path":"demos/local-stub.md","ref":"./demos/local-stub.md","articles":[]},{"title":"6.26 Local mock","level":"1.7.26","depth":2,"path":"demos/local-mock.md","ref":"./demos/local-mock.md","articles":[]},{"title":"6.27 Delay publish","level":"1.7.27","depth":2,"path":"demos/delay-publish.md","ref":"./demos/delay-publish.md","articles":[]},{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"path":"demos/concurrency-control.md","ref":"./demos/concurrency-control.md","articles":[]},{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"path":"demos/config-connections.md","ref":"./demos/config-connections.md","articles":[]},{"title":"6.30 Lazy connect","level":"1.7.30","depth":2,"path":"demos/lazy-connect.md","ref":"./demos/lazy-connect.md","articles":[]},{"title":"6.31 Stickness connections","level":"1.7.31","depth":2,"path":"demos/stickiness.md","ref":"./demos/stickiness.md","articles":[]},{"title":"6.32 Token authorization","level":"1.7.32","depth":2,"path":"demos/token-authorization.md","ref":"./demos/token-authorization.md","articles":[]},{"title":"6.33 Routing rule","level":"1.7.33","depth":2,"path":"demos/routing-rule.md","ref":"./demos/routing-rule.md","articles":[]},{"title":"6.34 Configuration rule","level":"1.7.34","depth":2,"path":"demos/config-rule.md","ref":"./demos/config-rule.md","articles":[]},{"title":"6.35 Service downgrade","level":"1.7.35","depth":2,"path":"demos/service-donwngrade.md","ref":"./demos/service-donwngrade.md","articles":[]},{"title":"6.36 Graceful shutdown","level":"1.7.36","depth":2,"path":"demos/graceful-shutdown.md","ref":"./demos/graceful-shutdown.md","articles":[]},{"title":"6.37 Hostname binding ","level":"1.7.37","depth":2,"path":"demos/hostname-binding.md","ref":"./demos/hostname-binding.md","articles":[]},{"title":"6.38 Logger strategy","level":"1.7.38","depth":2,"path":"demos/logger-strategy.md","ref":"./demos/logger-strategy.md","articles":[]},{"title":"6.39 Accesslog","level":"1.7.39","depth":2,"path":"demos/accesslog.md","ref":"./demos/accesslog.md","articles":[]},{"title":"6.40 Service container","level":"1.7.40","depth":2,"path":"demos/service-container.md","ref":"./demos/service-container.md","articles":[]},{"title":"6.41 Reference config cache","level":"1.7.41","depth":2,"path":"demos/reference-config-cache.md","ref":"./demos/reference-config-cache.md","articles":[]},{"title":"6.42 Distributed transaction","level":"1.7.42","depth":2,"path":"demos/distributed-transaction.md","ref":"./demos/distributed-transaction.md","articles":[]},{"title":"6.43 Dumping thread stack automatically","level":"1.7.43","depth":2,"path":"demos/dump.md","ref":"./demos/dump.md","articles":[]},{"title":"6.44 Netty4","level":"1.7.44","depth":2,"path":"demos/netty4.md","ref":"./demos/netty4.md","articles":[]}]},"previous":{"title":"5.3 API configuration","level":"1.6.3","depth":2,"path":"configuration/api.md","ref":"./configuration/api.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/annotation.md","mtime":"2018-03-19T06:46:50.936Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1539,30 +1531,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/configuration/api.html b/books/dubbo-user-book-en/configuration/api.html
index bd793642..18696bf4 100644
--- a/books/dubbo-user-book-en/configuration/api.html
+++ b/books/dubbo-user-book-en/configuration/api.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="../demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="../demos/service-donwngrade.html">
             
-                <span>
+                <a href="../demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1401,106 +1393,106 @@ <h1>
                                 <section class="normal markdown-section">
                                 
                                 <h1 id="api-configuration">API Configuration</h1>
-<p>All API properties have counterparts in XML, see <a href="../references/xml/introduction.html">XML References</a> for details. For example <code>ApplicationConfig.setName(&quot;xxx&quot;)</code> equals to  <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>application</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>xxx<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code> <sup><a href="#fn_1" id="reffn_1">1</a></sup></p>
+<p>All API properties have counterparts in XML, see <a href="../references/xml/introduction.html">XML References</a> for details. For example <code>ApplicationConfig.setName(&quot;xxx&quot;)</code> equals to  <code>&lt;dubbo:application name=&quot;xxx&quot; /&gt;</code> <sup><a href="#fn_1" id="reffn_1">1</a></sup></p>
 <h2 id="provider-side">Provider Side</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>ApplicationConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>RegistryConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>ProviderConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>ServiceConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>xxx<span class="token punctuation">.</span>XxxService<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>xxx<span class="token punctuation">.</span>XxxServiceImpl<span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Implementation</span>
-XxxService xxxService <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XxxServiceImpl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Application Info</span>
-ApplicationConfig application <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ApplicationConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-application<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">&quot;xxx&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Registry Info</span>
-RegistryConfig registry <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RegistryConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-registry<span class="token punctuation">.</span><span class="token function">setAddress</span><span class="token punctuation">(</span><span class="token string">&quot;10.20.130.230:9090&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-registry<span class="token punctuation">.</span><span class="token function">setUsername</span><span class="token punctuation">(</span><span class="token string">&quot;aaa&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-registry<span class="token punctuation">.</span><span class="token function">setPassword</span><span class="token punctuation">(</span><span class="token string">&quot;bbb&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Protocol</span>
-ProtocolConfig protocol <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ProtocolConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-protocol<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">&quot;dubbo&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-protocol<span class="token punctuation">.</span><span class="token function">setPort</span><span class="token punctuation">(</span><span class="token number">12345</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-protocol<span class="token punctuation">.</span><span class="token function">setThreads</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// NOTES: ServiceConfig holds the serversocket instance and keeps connections to registry, please cache it for performance.</span>
-
-<span class="token comment" spellcheck="true">// Exporting</span>
-ServiceConfig<span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span> service <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ServiceConfig</span><span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// In case of memory leak, please cache.</span>
-service<span class="token punctuation">.</span><span class="token function">setApplication</span><span class="token punctuation">(</span>application<span class="token punctuation">)</span><span class="token punctuation">;</span>
-service<span class="token punctuation">.</span><span class="token function">setRegistry</span><span class="token punctuation">(</span>registry<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// Use setRegistries() for multi-registry case</span>
-service<span class="token punctuation">.</span><span class="token function">setProtocol</span><span class="token punctuation">(</span>protocol<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// Use setProtocols() for multi-protocol case</span>
-service<span class="token punctuation">.</span><span class="token function">setInterface</span><span class="token punctuation">(</span>XxxService<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-service<span class="token punctuation">.</span><span class="token function">setRef</span><span class="token punctuation">(</span>xxxService<span class="token punctuation">)</span><span class="token punctuation">;</span>
-service<span class="token punctuation">.</span><span class="token function">setVersion</span><span class="token punctuation">(</span><span class="token string">&quot;1.0.0&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Local export and register</span>
-service<span class="token punctuation">.</span><span class="token function">export</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.ApplicationConfig;
+<span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.RegistryConfig;
+<span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.ProviderConfig;
+<span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.ServiceConfig;
+<span class="hljs-keyword">import</span> com.xxx.XxxService;
+<span class="hljs-keyword">import</span> com.xxx.XxxServiceImpl;
+
+<span class="hljs-comment">// Implementation</span>
+XxxService xxxService = <span class="hljs-keyword">new</span> XxxServiceImpl();
+
+<span class="hljs-comment">// Application Info</span>
+ApplicationConfig application = <span class="hljs-keyword">new</span> ApplicationConfig();
+application.setName(<span class="hljs-string">&quot;xxx&quot;</span>);
+
+<span class="hljs-comment">// Registry Info</span>
+RegistryConfig registry = <span class="hljs-keyword">new</span> RegistryConfig();
+registry.setAddress(<span class="hljs-string">&quot;10.20.130.230:9090&quot;</span>);
+registry.setUsername(<span class="hljs-string">&quot;aaa&quot;</span>);
+registry.setPassword(<span class="hljs-string">&quot;bbb&quot;</span>);
+
+<span class="hljs-comment">// Protocol</span>
+ProtocolConfig protocol = <span class="hljs-keyword">new</span> ProtocolConfig();
+protocol.setName(<span class="hljs-string">&quot;dubbo&quot;</span>);
+protocol.setPort(<span class="hljs-number">12345</span>);
+protocol.setThreads(<span class="hljs-number">200</span>);
+
+<span class="hljs-comment">// NOTES: ServiceConfig holds the serversocket instance and keeps connections to registry, please cache it for performance.</span>
+
+<span class="hljs-comment">// Exporting</span>
+ServiceConfig&lt;XxxService&gt; service = <span class="hljs-keyword">new</span> ServiceConfig&lt;XxxService&gt;(); <span class="hljs-comment">// In case of memory leak, please cache.</span>
+service.setApplication(application);
+service.setRegistry(registry); <span class="hljs-comment">// Use setRegistries() for multi-registry case</span>
+service.setProtocol(protocol); <span class="hljs-comment">// Use setProtocols() for multi-protocol case</span>
+service.setInterface(XxxService.class);
+service.setRef(xxxService);
+service.setVersion(<span class="hljs-string">&quot;1.0.0&quot;</span>);
+
+<span class="hljs-comment">// Local export and register</span>
+service.export();
 </code></pre>
 <h2 id="consumer-side">Consumer Side</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>ApplicationConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>RegistryConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>ConsumerConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>config<span class="token punctuation">.</span>ReferenceConfig<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>xxx<span class="token punctuation">.</span>XxxService<span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Application Info</span>
-ApplicationConfig application <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ApplicationConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-application<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">&quot;yyy&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Registry Info</span>
-RegistryConfig registry <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RegistryConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-registry<span class="token punctuation">.</span><span class="token function">setAddress</span><span class="token punctuation">(</span><span class="token string">&quot;10.20.130.230:9090&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-registry<span class="token punctuation">.</span><span class="token function">setUsername</span><span class="token punctuation">(</span><span class="token string">&quot;aaa&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-registry<span class="token punctuation">.</span><span class="token function">setPassword</span><span class="token punctuation">(</span><span class="token string">&quot;bbb&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// NOTES: ReferenceConfig holds the connections to registry and providers, please cache it for performance.</span>
-
-<span class="token comment" spellcheck="true">// Refer remote service</span>
-ReferenceConfig<span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span> reference <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ReferenceConfig</span><span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// In case of memory leak, please cache.</span>
-reference<span class="token punctuation">.</span><span class="token function">setApplication</span><span class="token punctuation">(</span>application<span class="token punctuation">)</span><span class="token punctuation">;</span>
-reference<span class="token punctuation">.</span><span class="token function">setRegistry</span><span class="token punctuation">(</span>registry<span class="token punctuation">)</span><span class="token punctuation">;</span> 
-reference<span class="token punctuation">.</span><span class="token function">setInterface</span><span class="token punctuation">(</span>XxxService<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-reference<span class="token punctuation">.</span><span class="token function">setVersion</span><span class="token punctuation">(</span><span class="token string">&quot;1.0.0&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Use xxxService just like a local bean</span>
-XxxService xxxService <span class="token operator">=</span> reference<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// NOTES: Please cache this proxy instance.</span>
+<pre><code class="lang-java"><span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.ApplicationConfig;
+<span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.RegistryConfig;
+<span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.ConsumerConfig;
+<span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.config.ReferenceConfig;
+<span class="hljs-keyword">import</span> com.xxx.XxxService;
+
+<span class="hljs-comment">// Application Info</span>
+ApplicationConfig application = <span class="hljs-keyword">new</span> ApplicationConfig();
+application.setName(<span class="hljs-string">&quot;yyy&quot;</span>);
+
+<span class="hljs-comment">// Registry Info</span>
+RegistryConfig registry = <span class="hljs-keyword">new</span> RegistryConfig();
+registry.setAddress(<span class="hljs-string">&quot;10.20.130.230:9090&quot;</span>);
+registry.setUsername(<span class="hljs-string">&quot;aaa&quot;</span>);
+registry.setPassword(<span class="hljs-string">&quot;bbb&quot;</span>);
+
+<span class="hljs-comment">// NOTES: ReferenceConfig holds the connections to registry and providers, please cache it for performance.</span>
+
+<span class="hljs-comment">// Refer remote service</span>
+ReferenceConfig&lt;XxxService&gt; reference = <span class="hljs-keyword">new</span> ReferenceConfig&lt;XxxService&gt;(); <span class="hljs-comment">// In case of memory leak, please cache.</span>
+reference.setApplication(application);
+reference.setRegistry(registry); 
+reference.setInterface(XxxService.class);
+reference.setVersion(<span class="hljs-string">&quot;1.0.0&quot;</span>);
+
+<span class="hljs-comment">// Use xxxService just like a local bean</span>
+XxxService xxxService = reference.get(); <span class="hljs-comment">// NOTES: Please cache this proxy instance.</span>
 </code></pre>
 <h2 id="specials">Specials</h2>
 <p>Only care about the differences:</p>
 <h3 id="configuration-of-method-level">Configuration of Method level</h3>
-<pre class="language-"><code class="lang-java"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
-
-<span class="token comment" spellcheck="true">// Method level config</span>
-List<span class="token operator">&lt;</span>MethodConfig<span class="token operator">&gt;</span> methods <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token operator">&lt;</span>MethodConfig<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-MethodConfig method <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MethodConfig</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-method<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">&quot;createXxx&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-method<span class="token punctuation">.</span><span class="token function">setTimeout</span><span class="token punctuation">(</span><span class="token number">10000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-method<span class="token punctuation">.</span><span class="token function">setRetries</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-methods<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>method<span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// Referring</span>
-ReferenceConfig<span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span> reference <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ReferenceConfig</span><span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
-reference<span class="token punctuation">.</span><span class="token function">setMethods</span><span class="token punctuation">(</span>methods<span class="token punctuation">)</span><span class="token punctuation">;</span> 
-
-<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
+<pre><code class="lang-java">...
+
+<span class="hljs-comment">// Method level config</span>
+List&lt;MethodConfig&gt; methods = <span class="hljs-keyword">new</span> ArrayList&lt;MethodConfig&gt;();
+MethodConfig method = <span class="hljs-keyword">new</span> MethodConfig();
+method.setName(<span class="hljs-string">&quot;createXxx&quot;</span>);
+method.setTimeout(<span class="hljs-number">10000</span>);
+method.setRetries(<span class="hljs-number">0</span>);
+methods.add(method);
+
+<span class="hljs-comment">// Referring</span>
+ReferenceConfig&lt;XxxService&gt; reference = <span class="hljs-keyword">new</span> ReferenceConfig&lt;XxxService&gt;();
+...
+reference.setMethods(methods); 
+
+...
 </code></pre>
 <h3 id="peer-to-peer">Peer to Peer</h3>
-<pre class="language-"><code class="lang-java">
-<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
+<pre><code class="lang-java">
+...
 
-ReferenceConfig<span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span> reference <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ReferenceConfig</span><span class="token operator">&lt;</span>XxxService<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
-<span class="token comment" spellcheck="true">// If you know the address of the provider and want to bypass the registry, use `reference.setUrl()` to specify the provider directly. Refer [How to Invoke a specific provider](../demos/explicit-target.md) for details.</span>
-reference<span class="token punctuation">.</span><span class="token function">setUrl</span><span class="token punctuation">(</span><span class="token string">&quot;dubbo://10.20.130.230:20880/com.xxx.XxxService&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> 
+ReferenceConfig&lt;XxxService&gt; reference = <span class="hljs-keyword">new</span> ReferenceConfig&lt;XxxService&gt;(); 
+<span class="hljs-comment">// If you know the address of the provider and want to bypass the registry, use `reference.setUrl()` to specify the provider directly. Refer [How to Invoke a specific provider](../demos/explicit-target.md) for details.</span>
+reference.setUrl(<span class="hljs-string">&quot;dubbo://10.20.130.230:20880/com.xxx.XxxService&quot;</span>); 
 
-<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
+...
 </code></pre>
 <blockquote id="fn_1">
 <sup>1</sup>. When should we usd API: API is very useful for integrating with systems like OpenAPI, ESB, Test, Mock, etc. General Providers and Consumers, we still recommend use <a href="xml.html">XML Configuration</a>.<a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
@@ -1548,7 +1540,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.3 API configuration","level":"1.6.3","depth":2,"next":{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"path":"configuration/annotation.md","ref":"./configuration/annotation.md","articles":[]},"previous":{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"path":"configuration/properties.md","ref":"./configuration/properties.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/api.md","mtime":"2017-12-26T02:28:31.606Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.3 API configuration","level":"1.6.3","depth":2,"next":{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"path":"configuration/annotation.md","ref":"./configuration/annotation.md","articles":[]},"previous":{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"path":"configuration/properties.md","ref":"./configuration/properties.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/api.md","mtime":"2018-03-19T06:46:50.937Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1558,30 +1550,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/configuration/index.html b/books/dubbo-user-book-en/configuration/index.html
index b04d4cb8..eb037e29 100644
--- a/books/dubbo-user-book-en/configuration/index.html
+++ b/books/dubbo-user-book-en/configuration/index.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="../demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="../demos/service-donwngrade.html">
             
-                <span>
+                <a href="../demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1444,7 +1436,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5 Configuration","level":"1.6","depth":1,"next":{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"path":"configuration/xml.md","ref":"./configuration/xml.md","articles":[]},"previous":{"title":"4 maturality","level":"1.5","depth":1,"path":"maturity.md","ref":"./maturity.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/index.md","mtime":"2017-12-26T02:28:31.606Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5 Configuration","level":"1.6","depth":1,"next":{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"path":"configuration/xml.md","ref":"./configuration/xml.md","articles":[]},"previous":{"title":"4 maturality","level":"1.5","depth":1,"path":"maturity.md","ref":"./maturity.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/index.md","mtime":"2018-03-19T06:46:50.937Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1454,30 +1446,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/configuration/properties.html b/books/dubbo-user-book-en/configuration/properties.html
index 9ff11a6e..1d540240 100644
--- a/books/dubbo-user-book-en/configuration/properties.html
+++ b/books/dubbo-user-book-en/configuration/properties.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="../demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="../demos/service-donwngrade.html">
             
-                <span>
+                <a href="../demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1406,24 +1398,24 @@ <h1 id="properties-configuration">Properties Configuration</h1>
 <h2 id="mapping-rules">Mapping Rules</h2>
 <p>Combine the tag name and attribute name of the XML tag, use <code>.</code> to split. One property per line.</p>
 <ul>
-<li><code>dubbo.application.name=foo</code> equals to <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>application</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>foo<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code> </li>
-<li><code>dubbo.registry.address=10.20.153.10:9090</code> equals to <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>registry</span> <span class="token attr-name">address</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10.20.153.10:9090<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code>  </li>
+<li><code>dubbo.application.name=foo</code> equals to <code>&lt;dubbo:application name=&quot;foo&quot; /&gt;</code> </li>
+<li><code>dubbo.registry.address=10.20.153.10:9090</code> equals to <code>&lt;dubbo:registry address=&quot;10.20.153.10:9090&quot; /&gt;</code>  </li>
 </ul>
 <p>If you have more than one tags in a XML configuration, you can use the <code>id</code> value to distinguish. If you don&apos;t specify a id, ti will applied to all tags.</p>
 <ul>
-<li><code>dubbo.protocol.rmi.port=1234</code> equals to <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>rmi<span class="token punctuation">&quot;</span></span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>rmi<span class="token punctuation">&quot;</span></span> <span class="token attr-name">port</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>1099<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code></li>
-<li><code>dubbo.registry.china.address=10.20.153.10:9090</code> equals to <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>registry</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>china<span class="token punctuation">&quot;</span></span> <span class="token attr-name">address</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10.20.153.10:9090<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code></li>
+<li><code>dubbo.protocol.rmi.port=1234</code> equals to <code>&lt;dubbo:protocol id=&quot;rmi&quot; name=&quot;rmi&quot; port=&quot;1099&quot; /&gt;</code></li>
+<li><code>dubbo.registry.china.address=10.20.153.10:9090</code> equals to <code>&lt;dubbo:registry id=&quot;china&quot; address=&quot;10.20.153.10:9090&quot; /&gt;</code></li>
 </ul>
 <p>Here is a typical dubbo.properties demo configuration&#xFF1A;</p>
-<pre class="language-"><code class="lang-properties"><span class="token attr-name">dubbo.application.name</span><span class="token punctuation">=</span><span class="token attr-value">foo</span>
-<span class="token attr-name">dubbo.application.owner</span><span class="token punctuation">=</span><span class="token attr-value">bar</span>
-<span class="token attr-name">dubbo.registry.address</span><span class="token punctuation">=</span><span class="token attr-value">10.20.153.10:9090</span>
+<pre><code class="lang-properties">dubbo.application.name=foo
+dubbo.application.owner=bar
+dubbo.registry.address=10.20.153.10:9090
 </code></pre>
 <h2 id="overrides-and-priorities">Overrides and Priorities</h2>
 <p><img src="../sources/images/dubbo-properties-override.jpg" alt="properties-override"></p>
 <p>Priorities from high to low:</p>
 <ul>
-<li><p>JVM -D parameters, you can easily override configuration when deploying or starting applications, e.g., change the port of dubbo protocol&#x3002;</p>
+<li><p>JVM -D parameters, you can easily override configuration when deploying or starting applications, e.g., change the port of dubbo protocol.</p>
 </li>
 <li><p>XML, the properties present in XML will override that in dubbo.properties.</p>
 </li>
@@ -1474,7 +1466,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"next":{"title":"5.3 API configuration","level":"1.6.3","depth":2,"path":"configuration/api.md","ref":"./configuration/api.md","articles":[]},"previous":{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"path":"configuration/xml.md","ref":"./configuration/xml.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/properties.md","mtime":"2017-12-26T02:28:31.607Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"next":{"title":"5.3 API configuration","level":"1.6.3","depth":2,"path":"configuration/api.md","ref":"./configuration/api.md","articles":[]},"previous":{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"path":"configuration/xml.md","ref":"./configuration/xml.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/properties.md","mtime":"2018-03-19T06:46:50.937Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1484,30 +1476,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/configuration/xml.html b/books/dubbo-user-book-en/configuration/xml.html
index 1a0ba364..d5d95edb 100644
--- a/books/dubbo-user-book-en/configuration/xml.html
+++ b/books/dubbo-user-book-en/configuration/xml.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="../demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="../demos/service-donwngrade.html">
             
-                <span>
+                <a href="../demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1403,31 +1395,31 @@ <h1>
                                 <h1 id="xml-configuration">XML Configuration</h1>
 <p>About the XML configuration items, see&#xFF1A;<a href="../references/xml/introduction.html">XML References</a>. If you prefer use API directly instead of using Spring, see <a href="api.html">API Configuration</a>. Want a example of how to use configuration, see <a href="../quick-start.html">Quick Start</a>&#x3002;</p>
 <h2 id="providerxml-demo">provider.xml demo</h2>
-<pre class="language-"><code class="lang-xml"><span class="token prolog">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://www.springframework.org/schema/beans<span class="token punctuation">&quot;</span></span>
-    <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">&quot;</span></span>
-    <span class="token attr-name"><span class="token namespace">xmlns:</span>dubbo</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://code.alibabatech.com/schema/dubbo<span class="token punctuation">&quot;</span></span>
-    <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>  
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>application</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>hello-world-app<span class="token punctuation">&quot;</span></span>  <span class="token punctuation">/&gt;</span></span>  
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>registry</span> <span class="token attr-name">address</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>multicast://224.5.6.7:1234<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>  
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">port</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>20880<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>  
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.dubbo.demo.DemoService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>demoServiceLocal<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>  
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>demoServiceRemote<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.dubbo.demo.DemoService<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>  
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="php"><span class="hljs-meta">&lt;?</span>xml version=<span class="hljs-string">&quot;1.0&quot;</span> encoding=<span class="hljs-string">&quot;UTF-8&quot;</span><span class="hljs-meta">?&gt;</span></span>
+<span class="hljs-tag">&lt;<span class="hljs-name">beans</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">&quot;http://www.springframework.org/schema/beans&quot;</span>
+    <span class="hljs-attr">xmlns:xsi</span>=<span class="hljs-string">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span>
+    <span class="hljs-attr">xmlns:dubbo</span>=<span class="hljs-string">&quot;http://dubbo.apache.org/schema/dubbo&quot;</span>
+    <span class="hljs-attr">xsi:schemaLocation</span>=<span class="hljs-string">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd&quot;</span>&gt;</span>  
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:application</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;hello-world-app&quot;</span>  /&gt;</span>  
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:registry</span> <span class="hljs-attr">address</span>=<span class="hljs-string">&quot;multicast://224.5.6.7:1234&quot;</span> /&gt;</span>  
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;dubbo&quot;</span> <span class="hljs-attr">port</span>=<span class="hljs-string">&quot;20880&quot;</span> /&gt;</span>  
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.alibaba.dubbo.demo.DemoService&quot;</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;demoServiceLocal&quot;</span> /&gt;</span>  
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;demoServiceRemote&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.alibaba.dubbo.demo.DemoService&quot;</span> /&gt;</span>  
+<span class="hljs-tag">&lt;/<span class="hljs-name">beans</span>&gt;</span>
 </code></pre>
 <p>All tags support custom parameters, so we can meet the special config requirements at different extension points, such as:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>jms<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>parameter</span> <span class="token attr-name">key</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>queue<span class="token punctuation">&quot;</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>your_queue<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>protocol</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;jms&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:parameter</span> <span class="hljs-attr">key</span>=<span class="hljs-string">&quot;queue&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;your_queue&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:protocol</span>&gt;</span>
 </code></pre>
 <p>Or: </p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>beans</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://www.springframework.org/schema/beans<span class="token punctuation">&quot;</span></span>
-    <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">&quot;</span></span>
-    <span class="token attr-name"><span class="token namespace">xmlns:</span>dubbo</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://code.alibabatech.com/schema/dubbo<span class="token punctuation">&quot;</span></span>
-    <span class="token attr-name"><span class="token namespace">xmlns:</span>p</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://www.springframework.org/schema/p<span class="token punctuation">&quot;</span></span>
-    <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>  
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>jms<span class="token punctuation">&quot;</span></span> <span class="token attr-name"><span class="token namespace">p:</span>queue</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>your_queue<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>  
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>beans</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">beans</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">&quot;http://www.springframework.org/schema/beans&quot;</span>
+    <span class="hljs-attr">xmlns:xsi</span>=<span class="hljs-string">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span>
+    <span class="hljs-attr">xmlns:dubbo</span>=<span class="hljs-string">&quot;http://dubbo.apache.org/schema/dubbo&quot;</span>
+    <span class="hljs-attr">xmlns:p</span>=<span class="hljs-string">&quot;http://www.springframework.org/schema/p&quot;</span>
+    <span class="hljs-attr">xsi:schemaLocation</span>=<span class="hljs-string">&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd&quot;</span>&gt;</span>  
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;jms&quot;</span> <span class="hljs-attr">p:queue</span>=<span class="hljs-string">&quot;your_queue&quot;</span> /&gt;</span>  
+<span class="hljs-tag">&lt;/<span class="hljs-name">beans</span>&gt;</span>
 </code></pre>
 <h2 id="the-relations-between-configuration-tags">The relations between configuration tags</h2>
 <p><img src="../sources/images/dubbo-config.jpg" alt="dubbo-config"></p>
@@ -1441,57 +1433,57 @@ <h2 id="the-relations-between-configuration-tags">The relations between configur
 </thead>
 <tbody>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:service/&gt;</code></td>
 <td>Service Export</td>
 <td>Used to export service, define service metadata, export service with mutiple protocols, register service to multiple registries</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:reference/&gt;</code></td>
 <td>Service Reference</td>
 <td>Used to create a remote proxy, subscribe to multiple registries</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:protocol/&gt;</code></td>
 <td>Protocol Config</td>
 <td>Configure the protocol for services on provider side, the consumer side follows.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>application</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:application/&gt;</code></td>
 <td>Application Config</td>
 <td>Applies to both provider and consumer.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>module</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:module/&gt;</code></td>
 <td>Module Config</td>
 <td>Optional.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>registry</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:registry/&gt;</code></td>
 <td>Registry Center</td>
 <td>Registry info: address, protocol, etc.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>monitor</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:monitor/&gt;</code></td>
 <td>Monitor Center</td>
 <td>Monitor info: address, address, etc. Optional.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>provider</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:provider/&gt;</code></td>
 <td>Default Config for Providers</td>
 <td>Default Config for ServiceConfigs. Optional.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>consumer</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:consumer/&gt;</code></td>
 <td>Default Config for Consumers</td>
 <td>Default Config for ReferenceConfigs. Optional.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:method/&gt;</code></td>
 <td>Method level Config</td>
 <td>Method level Config for ServiceConfig and ReferenceConfig.</td>
 </tr>
 <tr>
-<td><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>argument</span><span class="token punctuation">/&gt;</span></span></code></td>
+<td><code>&lt;dubbo:argument/&gt;</code></td>
 <td>Argument Config</td>
 <td>Used to specify the method parameter configuration.</td>
 </tr>
@@ -1507,7 +1499,7 @@ <h2 id="overrides-and-priorities">Overrides and Priorities</h2>
 <p><img src="../sources/images/dubbo-config-override.jpg" alt="dubbo-config-override"></p>
 <p>It is recommended that the provider set a timeout for every service, because the provider knows exactly how long a method needs to be executed. If a consumer cites multiple services at the same time, it doesn&apos;t need to care about the timeout settings of each service.</p>
 <p>Theoretically, almost all configuration items supported in ReferenceConfig can be configured with a default value using ConsumerConfig, ServiceConfig, ProviderConfig.</p>
-<p>1: Requires spring <code>2.1.0+</code>, see announcement for details&#xFF1A;<code>xmlns:p=&quot;http://www.springframework.org/schema/p&quot;</code><br>2: The reference bean obeys lazy init by default, only if it is refered by other beans or other instance try to get its instance using <code>getBean()</code> method  will the reference be initialized. If you need eager init, config this way: <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">...</span> <span class="token attr-name">init</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code></p>
+<p>1: Requires spring <code>3.2.16+</code>, see announcement for details&#xFF1A;<code>xmlns:p=&quot;http://www.springframework.org/schema/p&quot;</code><br>2: The reference bean obeys lazy init by default, only if it is refered by other beans or other instance try to get its instance using <code>getBean()</code> method  will the reference be initialized. If you need eager init, config this way: <code>&lt;dubbo:reference ... init=&quot;true&quot; /&gt;</code></p>
 
                                 
                                 </section>
@@ -1551,7 +1543,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"next":{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"path":"configuration/properties.md","ref":"./configuration/properties.md","articles":[]},"previous":{"title":"5 Configuration","level":"1.6","depth":1,"path":"configuration/index.md","ref":"./configuration/index.md","articles":[{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"path":"configuration/xml.md","ref":"./configuration/xml.md","articles":[]},{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"path":"configuration/properties.md","ref":"./configuration/properties.md","articles":[]},{"title":"5.3 API configuration","level":"1.6.3","depth":2,"path":"configuration/api.md","ref":"./configuration/api.md","articles":[]},{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"path":"configuration/annotation.md","ref":"./configuration/annotation.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/xml.md","mtime":"2017-12-26T02:28:31.607Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"next":{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"path":"configuration/properties.md","ref":"./configuration/properties.md","articles":[]},"previous":{"title":"5 Configuration","level":"1.6","depth":1,"path":"configuration/index.md","ref":"./configuration/index.md","articles":[{"title":"5.1 XML configuration","level":"1.6.1","depth":2,"path":"configuration/xml.md","ref":"./configuration/xml.md","articles":[]},{"title":"5.2 Properties configuration","level":"1.6.2","depth":2,"path":"configuration/properties.md","ref":"./configuration/properties.md","articles":[]},{"title":"5.3 API configuration","level":"1.6.3","depth":2,"path":"configuration/api.md","ref":"./configuration/api.md","articles":[]},{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"path":"configuration/annotation.md","ref":"./configuration/annotation.md","articles":[]}]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"configuration/xml.md","mtime":"2018-05-14T09:24:13.949Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1561,30 +1553,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/coveragence.html b/books/dubbo-user-book-en/coveragence.html
index c454e1de..3824b0d5 100644
--- a/books/dubbo-user-book-en/coveragence.html
+++ b/books/dubbo-user-book-en/coveragence.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -113,7 +105,7 @@
                 <a href="preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -745,9 +737,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="demos/service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="demos/service-donwngrade.html">
             
-                <span>
+                <a href="demos/service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1449,7 +1441,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"17 Test coverage report","level":"1.18","depth":1,"previous":{"title":"16 Performance testing reports","level":"1.17","depth":1,"path":"perf-test.md","ref":"./perf-test.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"coveragence.md","mtime":"2017-12-26T02:28:31.607Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":".","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"17 Test coverage report","level":"1.18","depth":1,"previous":{"title":"16 Performance testing reports","level":"1.17","depth":1,"path":"perf-test.md","ref":"./perf-test.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"coveragence.md","mtime":"2018-03-19T06:46:50.938Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":".","book":{"language":""}});
         });
     </script>
 </div>
@@ -1459,30 +1451,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/accesslog.html b/books/dubbo-user-book-en/demos/accesslog.html
index 4b152d03..b88af085 100644
--- a/books/dubbo-user-book-en/demos/accesslog.html
+++ b/books/dubbo-user-book-en/demos/accesslog.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1406,43 +1398,43 @@ <h1 id="access-log">Access Log</h1>
 The size of the access log maybe too much,please check the disk capacity.
 Now I will show you how to config the access log.</p>
 <h2 id="logging-by-logging-framework">Logging by logging framework</h2>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">accesslog</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token attr-name">...</span><span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">accesslog</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">...</span>/&gt;</span>
 </code></pre>
 <p>The above configuration will turn on <code>accesslog</code> switch for all provide services,and logging the access log with logging framework(log4j/logback/slf4j...).You can config the logging framework of <code>logger</code> and <code>appender</code> for logging the access log.The simplest way is config logger name with <code>dubbo.accesslog</code>. The Example:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appender</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>accesslogAppender<span class="token punctuation">&quot;</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>ch.qos.logback.core.rolling.RollingFileAppender<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>file</span><span class="token punctuation">&gt;</span></span>${loggingRoot}/accesslog/logging.log<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>file</span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>encoding</span><span class="token punctuation">&gt;</span></span>${loggingCharset}<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>encoding</span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>append</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>append</span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>rollingPolicy</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>ch.qos.logback.core.rolling.TimeBasedRollingPolicy<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>FileNamePattern</span><span class="token punctuation">&gt;</span></span>${loggingRoot}/accesslog/%d{yyyyMMdd}/logging.log.%d{yyyyMMdd}%i.gz
-            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>FileNamePattern</span><span class="token punctuation">&gt;</span></span>
-            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>MaxHistory</span><span class="token punctuation">&gt;</span></span>15<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>MaxHistory</span><span class="token punctuation">&gt;</span></span>
-            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>TimeBasedFileNamingAndTriggeringPolicy</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-                <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>MaxFileSize</span><span class="token punctuation">&gt;</span></span>1024MB<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>MaxFileSize</span><span class="token punctuation">&gt;</span></span>
-            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>TimeBasedFileNamingAndTriggeringPolicy</span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>rollingPolicy</span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>layout</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>ch.qos.logback.classic.PatternLayout<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>pattern</span><span class="token punctuation">&gt;</span></span><span class="token cdata">&lt;![CDATA[%level|%d{yyyy-MM-dd HH:mm:ss}|%m%n}]]&gt;</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>pattern</span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>layout</span><span class="token punctuation">&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>appender</span><span class="token punctuation">&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>logger</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo.accesslog<span class="token punctuation">&quot;</span></span> <span class="token attr-name">level</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>INFO<span class="token punctuation">&quot;</span></span> <span class="token attr-name">additivity</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>false<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appender-ref</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>accesslogAppender<span class="token punctuation">&quot;</span></span><span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>logger</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">appender</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;accesslogAppender&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">file</span>&gt;</span>${loggingRoot}/accesslog/logging.log<span class="hljs-tag">&lt;/<span class="hljs-name">file</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">encoding</span>&gt;</span>${loggingCharset}<span class="hljs-tag">&lt;/<span class="hljs-name">encoding</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">append</span>&gt;</span>true<span class="hljs-tag">&lt;/<span class="hljs-name">append</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">rollingPolicy</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&quot;</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">FileNamePattern</span>&gt;</span>${loggingRoot}/accesslog/%d{yyyyMMdd}/logging.log.%d{yyyyMMdd}%i.gz
+            <span class="hljs-tag">&lt;/<span class="hljs-name">FileNamePattern</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">MaxHistory</span>&gt;</span>15<span class="hljs-tag">&lt;/<span class="hljs-name">MaxHistory</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">TimeBasedFileNamingAndTriggeringPolicy</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP&quot;</span>&gt;</span>
+                <span class="hljs-tag">&lt;<span class="hljs-name">MaxFileSize</span>&gt;</span>1024MB<span class="hljs-tag">&lt;/<span class="hljs-name">MaxFileSize</span>&gt;</span>
+            <span class="hljs-tag">&lt;/<span class="hljs-name">TimeBasedFileNamingAndTriggeringPolicy</span>&gt;</span>
+        <span class="hljs-tag">&lt;/<span class="hljs-name">rollingPolicy</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">layout</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;ch.qos.logback.classic.PatternLayout&quot;</span>&gt;</span>
+            <span class="hljs-tag">&lt;<span class="hljs-name">pattern</span>&gt;</span>&lt;![CDATA[%level|%d{yyyy-MM-dd HH:mm:ss}|%m%n}]]&gt;<span class="hljs-tag">&lt;/<span class="hljs-name">pattern</span>&gt;</span>
+        <span class="hljs-tag">&lt;/<span class="hljs-name">layout</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">appender</span>&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">logger</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;dubbo.accesslog&quot;</span> <span class="hljs-attr">level</span>=<span class="hljs-string">&quot;INFO&quot;</span> <span class="hljs-attr">additivity</span>=<span class="hljs-string">&quot;false&quot;</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">appender-ref</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;accesslogAppender&quot;</span>/&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">logger</span>&gt;</span>
 </code></pre>
 <p>The above is the demonstration of logback framework.Other logging framework is same too.It will logging the access log of all provide services into single file(<code>accesslog/logging.log</code>). And you can also config the access log of each provide service to logging separately,Only change <code>name</code> attribute of the <code>logger</code> tag,set the <code>name</code> attribute to <code>dubbo.accesslog.serviceInterfaceClassFullName</code>.The Example:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>logger</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo.accesslog.com.dubbo.FooServiceInterface<span class="token punctuation">&quot;</span></span> <span class="token attr-name">level</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>INFO<span class="token punctuation">&quot;</span></span> <span class="token attr-name">additivity</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>false<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>appender-ref</span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>fooServiceAccesslogAppender<span class="token punctuation">&quot;</span></span><span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>logger</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">logger</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;dubbo.accesslog.com.dubbo.FooServiceInterface&quot;</span> <span class="hljs-attr">level</span>=<span class="hljs-string">&quot;INFO&quot;</span> <span class="hljs-attr">additivity</span>=<span class="hljs-string">&quot;false&quot;</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">appender-ref</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;fooServiceAccesslogAppender&quot;</span>/&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">logger</span>&gt;</span>
 </code></pre>
 <p>If you only want logging the access log of specified provide service,but not all services.It&apos;s supported too.The Example:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">accesslog</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token attr-name">...</span><span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">accesslog</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">...</span>/&gt;</span>
 </code></pre>
 <h2 id="logging-by-specified-file-path">Logging by specified file path</h2>
 <p>You can specify the file path with the <code>accesslog</code> attribute.The Example:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">accesslog</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>/home/admin/logs/service/accesslog.log<span class="token punctuation">&quot;</span></span> <span class="token attr-name">...</span><span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">accesslog</span>=<span class="hljs-string">&quot;/home/admin/logs/service/accesslog.log&quot;</span> <span class="hljs-attr">...</span>/&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">accesslog</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>/home/admin/logs/service/accesslog.log<span class="token punctuation">&quot;</span></span> <span class="token attr-name">...</span><span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">accesslog</span>=<span class="hljs-string">&quot;/home/admin/logs/service/accesslog.log&quot;</span> <span class="hljs-attr">...</span>/&gt;</span>
 </code></pre>
 
                                 
@@ -1487,7 +1479,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.39 Accesslog","level":"1.7.39","depth":2,"next":{"title":"6.40 Service container","level":"1.7.40","depth":2,"path":"demos/service-container.md","ref":"./demos/service-container.md","articles":[]},"previous":{"title":"6.38 Logger strategy","level":"1.7.38","depth":2,"path":"demos/logger-strategy.md","ref":"./demos/logger-strategy.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/accesslog.md","mtime":"2017-12-26T02:28:31.608Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.39 Accesslog","level":"1.7.39","depth":2,"next":{"title":"6.40 Service container","level":"1.7.40","depth":2,"path":"demos/service-container.md","ref":"./demos/service-container.md","articles":[]},"previous":{"title":"6.38 Logger strategy","level":"1.7.38","depth":2,"path":"demos/logger-strategy.md","ref":"./demos/logger-strategy.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/accesslog.md","mtime":"2018-03-19T06:46:50.938Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1497,30 +1489,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/async-call.html b/books/dubbo-user-book-en/demos/async-call.html
index cca8a7e1..fefc40af 100644
--- a/books/dubbo-user-book-en/demos/async-call.html
+++ b/books/dubbo-user-book-en/demos/async-call.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1404,32 +1396,32 @@ <h1 id="asynchronous-call">Asynchronous Call</h1>
 <p>As dubbo is based on a non-blocking NIO network layer, the client can start parallel call to multiple remote services without explicitly starting mulithreads, which costs relatively fewer resources.</p>
 <p><img src="../sources/images/future.jpg" alt="/user-guide/images/future.jpg"></p>
 <p>You can config at <code>consumer.xml</code> for setup asynchronous call some remote service.</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>fooService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.foo.FooService<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>findFoo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">async</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>barService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.bar.BarService<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>findBar<span class="token punctuation">&quot;</span></span> <span class="token attr-name">async</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;fooService&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.alibaba.foo.FooService&quot;</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;findFoo&quot;</span> <span class="hljs-attr">async</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:reference</span>&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;barService&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.alibaba.bar.BarService&quot;</span>&gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;findBar&quot;</span> <span class="hljs-attr">async</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:reference</span>&gt;</span>
 </code></pre>
 <p>Configure the above configuration information,you can invoke the remote service in your code.</p>
-<pre class="language-"><code class="lang-java"><span class="token comment" spellcheck="true">// the invoke will return null immediately</span>
-fooService<span class="token punctuation">.</span><span class="token function">findFoo</span><span class="token punctuation">(</span>fooId<span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// get current invoke Future instance,when the remote service has return result,will notify this Future instance.</span>
-Future<span class="token operator">&lt;</span>Foo<span class="token operator">&gt;</span> fooFuture <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getFuture</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-comment">// the invoke will return null immediately</span>
+fooService.findFoo(fooId);
+<span class="hljs-comment">// get current invoke Future instance,when the remote service has return result,will notify this Future instance.</span>
+Future&lt;Foo&gt; fooFuture = RpcContext.getContext().getFuture();
 
-<span class="token comment" spellcheck="true">// the invoke will return null immediately</span>
-barService<span class="token punctuation">.</span><span class="token function">findBar</span><span class="token punctuation">(</span>barId<span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// get current invoke Future instance,when the remote service has return result,will notify this Future instance.</span>
-Future<span class="token operator">&lt;</span>Bar<span class="token operator">&gt;</span> barFuture <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getFuture</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<span class="hljs-comment">// the invoke will return null immediately</span>
+barService.findBar(barId);
+<span class="hljs-comment">// get current invoke Future instance,when the remote service has return result,will notify this Future instance.</span>
+Future&lt;Bar&gt; barFuture = RpcContext.getContext().getFuture();
 
-<span class="token comment" spellcheck="true">// now the request of findFoo and findBar was executed at same time,The client not need setup multithreading for parallel call, which is NIO-based non-blocking implementation of parallel calls</span>
+<span class="hljs-comment">// now the request of findFoo and findBar was executed at same time,The client not need setup multithreading for parallel call, which is NIO-based non-blocking implementation of parallel calls</span>
 
-<span class="token comment" spellcheck="true">// Current thread will be blocking,and wait findFoo has return. when remote service has return findFoo result,the current thread will be wake up.</span>
-Foo foo <span class="token operator">=</span> fooFuture<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// same to findFoo</span>
-Bar bar <span class="token operator">=</span> barFuture<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<span class="hljs-comment">// Current thread will be blocking,and wait findFoo has return. when remote service has return findFoo result,the current thread will be wake up.</span>
+Foo foo = fooFuture.get();
+<span class="hljs-comment">// same to findFoo</span>
+Bar bar = barFuture.get();
 
-<span class="token comment" spellcheck="true">// if findFoo expend five second for wait remote service  return result,and findBar expend six second. Actually,only expend six second will get findFoo and findBar result,and proceed to the next step.</span>
+<span class="hljs-comment">// if findFoo expend five second for wait remote service  return result,and findBar expend six second. Actually,only expend six second will get findFoo and findBar result,and proceed to the next step.</span>
 </code></pre>
 <p>You can also set whether to wait for the message to be sent:</p>
 <ul>
@@ -1437,10 +1429,10 @@ <h1 id="asynchronous-call">Asynchronous Call</h1>
 <li><code>sent=&quot;false&quot;</code> do not wait for the message to be send,when the message will push into io queue,will return immediately.</li>
 </ul>
 <p>The Example:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>findFoo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">async</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token attr-name">sent</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;findFoo&quot;</span> <span class="hljs-attr">async</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">sent</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
 </code></pre>
 <p>if you only want to asynchronous call,and don&apos;t care the return.you can config <code>return=&quot;false&quot;</code>,To reduce the cost of creating and managing Future objects.</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>findFoo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">async</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token attr-name">return</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>false<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;findFoo&quot;</span> <span class="hljs-attr">async</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">return</span>=<span class="hljs-string">&quot;false&quot;</span> /&gt;</span>
 </code></pre>
 <p><strong>Note</strong>
  <code>2.0.6+</code> version supported.</p>
@@ -1487,7 +1479,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.21 Asynchronous call","level":"1.7.21","depth":2,"next":{"title":"6.22 Local call","level":"1.7.22","depth":2,"path":"demos/local-call.md","ref":"./demos/local-call.md","articles":[]},"previous":{"title":"6.20 Attachment","level":"1.7.20","depth":2,"path":"demos/attachment.md","ref":"./demos/attachment.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/async-call.md","mtime":"2017-12-26T02:28:31.608Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.21 Asynchronous call","level":"1.7.21","depth":2,"next":{"title":"6.22 Local call","level":"1.7.22","depth":2,"path":"demos/local-call.md","ref":"./demos/local-call.md","articles":[]},"previous":{"title":"6.20 Attachment","level":"1.7.20","depth":2,"path":"demos/attachment.md","ref":"./demos/attachment.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/async-call.md","mtime":"2018-03-19T06:46:50.939Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1497,30 +1489,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/attachment.html b/books/dubbo-user-book-en/demos/attachment.html
index 05c72b96..56a9fad7 100644
--- a/books/dubbo-user-book-en/demos/attachment.html
+++ b/books/dubbo-user-book-en/demos/attachment.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1405,18 +1397,18 @@ <h1 id="implicit-parameters">Implicit parameters</h1>
 <img src="../sources/images/context.png" alt="/user-guide/images/context.png"></p>
 <h2 id="set-the-implicit-parameters-at-service-consumer-side">Set the implicit parameters at service consumer side</h2>
 <p>Via <code>setAttachment</code> on <code>RpcContext</code> set key/value pair for implicitly pass parameters.When finished once remote invoke,will be clear,so multi-invoke must set multi-times.</p>
-<pre class="language-"><code class="lang-java">RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">setAttachment</span><span class="token punctuation">(</span><span class="token string">&quot;index&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;1&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// implicitly pass parameters,behind the remote call will implicitly send these parameters to the server side, similar to the cookie, for the framework of integration, not recommended for regular business use</span>
-xxxService<span class="token punctuation">.</span><span class="token function">xxx</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// remote call</span>
-<span class="token comment" spellcheck="true">// ...</span>
+<pre><code class="lang-java">RpcContext.getContext().setAttachment(<span class="hljs-string">&quot;index&quot;</span>, <span class="hljs-string">&quot;1&quot;</span>); <span class="hljs-comment">// implicitly pass parameters,behind the remote call will implicitly send these parameters to the server side, similar to the cookie, for the framework of integration, not recommended for regular business use</span>
+xxxService.xxx(); <span class="hljs-comment">// remote call</span>
+<span class="hljs-comment">// ...</span>
 </code></pre>
 <h2 id="fetch-the-implicit-parameters-at-service-provider-side">Fetch the implicit parameters at service provider side</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">XxxServiceImpl</span> <span class="token keyword">implements</span> <span class="token class-name">XxxService</span> <span class="token punctuation">{</span>
+<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">XxxServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">XxxService</span> </span>{
 
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">xxx</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token comment" spellcheck="true">// get parameters which passed by the consumer side,for the framework of integration, not recommended for regular business use</span>
-        String index <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAttachment</span><span class="token punctuation">(</span><span class="token string">&quot;index&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">xxx</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-comment">// get parameters which passed by the consumer side,for the framework of integration, not recommended for regular business use</span>
+        String index = RpcContext.getContext().getAttachment(<span class="hljs-string">&quot;index&quot;</span>);
+    }
+}
 </code></pre>
 
                                 
@@ -1461,7 +1453,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.20 Attachment","level":"1.7.20","depth":2,"next":{"title":"6.21 Asynchronous call","level":"1.7.21","depth":2,"path":"demos/async-call.md","ref":"./demos/async-call.md","articles":[]},"previous":{"title":"6.19 Context","level":"1.7.19","depth":2,"path":"demos/context.md","ref":"./demos/context.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/attachment.md","mtime":"2017-12-26T02:28:31.608Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.20 Attachment","level":"1.7.20","depth":2,"next":{"title":"6.21 Asynchronous call","level":"1.7.21","depth":2,"path":"demos/async-call.md","ref":"./demos/async-call.md","articles":[]},"previous":{"title":"6.19 Context","level":"1.7.19","depth":2,"path":"demos/context.md","ref":"./demos/context.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/attachment.md","mtime":"2018-03-19T06:46:50.939Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1471,30 +1463,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/callback-parameter.html b/books/dubbo-user-book-en/demos/callback-parameter.html
index e2ad0aa6..fb35bf5a 100644
--- a/books/dubbo-user-book-en/demos/callback-parameter.html
+++ b/books/dubbo-user-book-en/demos/callback-parameter.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1401,94 +1393,94 @@ <h1>
                                 <section class="normal markdown-section">
                                 
                                 <h1 id="callback-parameter">Callback parameter</h1>
-<p>The parameter callback is the same as calling a local callback or listener, just declare which parameter is a callback type in Spring&apos;s configuration file, and Dubbo will generate a reverse proxy based on the long connection so that client logic can be called from the server.Can ref to <a href="https://github.com/alibaba/dubbo/tree/master/dubbo-test/dubbo-test-examples/src/main/java/com/alibaba/dubbo/examples/callback" target="_blank">Sample code in the dubbo project</a>.</p>
+<p>The parameter callback is the same as calling a local callback or listener, just declare which parameter is a callback type in Spring&apos;s configuration file, and Dubbo will generate a reverse proxy based on the long connection so that client logic can be called from the server.Can ref to <a href="https://github.com/apache/incubator-dubbo/tree/master/dubbo-test/dubbo-test-examples/src/main/java/com/alibaba/dubbo/examples/callback" target="_blank">Sample code in the dubbo project</a>.</p>
 <h2 id="example-of-service-interface">Example of service interface</h2>
 <h3 id="callbackservicejava">CallbackService.java</h3>
-<pre class="language-"><code class="lang-java"><span class="token keyword">package</span> com<span class="token punctuation">.</span>callback<span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-keyword">package</span> com.callback;
 
-<span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">CallbackService</span> <span class="token punctuation">{</span>
-    <span class="token keyword">void</span> <span class="token function">addListener</span><span class="token punctuation">(</span>String key<span class="token punctuation">,</span> CallbackListener listener<span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token punctuation">}</span>
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">CallbackService</span> </span>{
+    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">addListener</span><span class="hljs-params">(String key, CallbackListener listener)</span></span>;
+}
 </code></pre>
 <h3 id="callbacklistenerjava">CallbackListener.java</h3>
-<pre class="language-"><code class="lang-java"><span class="token keyword">package</span> com<span class="token punctuation">.</span>callback<span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-keyword">package</span> com.callback;
 
-<span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">CallbackListener</span> <span class="token punctuation">{</span>
-    <span class="token keyword">void</span> <span class="token function">changed</span><span class="token punctuation">(</span>String msg<span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token punctuation">}</span>
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">CallbackListener</span> </span>{
+    <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">changed</span><span class="hljs-params">(String msg)</span></span>;
+}
 </code></pre>
 <h2 id="example-of-service-provider-interface-implementation">Example of service provider interface implementation</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">package</span> com<span class="token punctuation">.</span>callback<span class="token punctuation">.</span>impl<span class="token punctuation">;</span>
-
-<span class="token keyword">import</span> java<span class="token punctuation">.</span>text<span class="token punctuation">.</span>SimpleDateFormat<span class="token punctuation">;</span>
-<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>Date<span class="token punctuation">;</span>
-<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>Map<span class="token punctuation">;</span>
-<span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span>ConcurrentHashMap<span class="token punctuation">;</span>
-
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>callback<span class="token punctuation">.</span>CallbackListener<span class="token punctuation">;</span>
-<span class="token keyword">import</span> com<span class="token punctuation">.</span>callback<span class="token punctuation">.</span>CallbackService<span class="token punctuation">;</span>
-
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CallbackServiceImpl</span> <span class="token keyword">implements</span> <span class="token class-name">CallbackService</span> <span class="token punctuation">{</span>
-
-    <span class="token keyword">private</span> <span class="token keyword">final</span> Map<span class="token operator">&lt;</span>String<span class="token punctuation">,</span> CallbackListener<span class="token operator">&gt;</span> listeners <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConcurrentHashMap</span><span class="token operator">&lt;</span>String<span class="token punctuation">,</span> CallbackListener<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-    <span class="token keyword">public</span> <span class="token function">CallbackServiceImpl</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        Thread t <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Thread</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Runnable</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-            <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">run</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-                <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-                    <span class="token keyword">try</span> <span class="token punctuation">{</span>
-                        <span class="token keyword">for</span><span class="token punctuation">(</span>Map<span class="token punctuation">.</span>Entry<span class="token operator">&lt;</span>String<span class="token punctuation">,</span> CallbackListener<span class="token operator">&gt;</span> entry <span class="token operator">:</span> listeners<span class="token punctuation">.</span><span class="token function">entrySet</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
-                           <span class="token keyword">try</span> <span class="token punctuation">{</span>
-                               entry<span class="token punctuation">.</span><span class="token function">getValue</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">changed</span><span class="token punctuation">(</span><span class="token function">getChanged</span><span class="token punctuation">(</span>entry<span class="token punctuation">.</span><span class="token function">getKey</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-                           <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Throwable</span> t<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-                               listeners<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span>entry<span class="token punctuation">.</span><span class="token function">getKey</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-                           <span class="token punctuation">}</span>
-                        <span class="token punctuation">}</span>
-                        Thread<span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">5000</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// Timed trigger change notification</span>
-                    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Throwable</span> t<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true">// Defense fault tolerance</span>
-                        t<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-                    <span class="token punctuation">}</span>
-                <span class="token punctuation">}</span>
-            <span class="token punctuation">}</span>
-        <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        t<span class="token punctuation">.</span><span class="token function">setDaemon</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        t<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">addListener</span><span class="token punctuation">(</span>String key<span class="token punctuation">,</span> CallbackListener listener<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        listeners<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> listener<span class="token punctuation">)</span><span class="token punctuation">;</span>
-        listener<span class="token punctuation">.</span><span class="token function">changed</span><span class="token punctuation">(</span><span class="token function">getChanged</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">// send change notification</span>
-    <span class="token punctuation">}</span>
-
-    <span class="token keyword">private</span> String <span class="token function">getChanged</span><span class="token punctuation">(</span>String key<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token keyword">return</span> <span class="token string">&quot;Changed: &quot;</span> <span class="token operator">+</span> <span class="token keyword">new</span> <span class="token class-name">SimpleDateFormat</span><span class="token punctuation">(</span><span class="token string">&quot;yyyy-MM-dd HH:mm:ss&quot;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">Date</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-keyword">package</span> com.callback.impl;
+
+<span class="hljs-keyword">import</span> java.text.SimpleDateFormat;
+<span class="hljs-keyword">import</span> java.util.Date;
+<span class="hljs-keyword">import</span> java.util.Map;
+<span class="hljs-keyword">import</span> java.util.concurrent.ConcurrentHashMap;
+
+<span class="hljs-keyword">import</span> com.callback.CallbackListener;
+<span class="hljs-keyword">import</span> com.callback.CallbackService;
+
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">CallbackServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">CallbackService</span> </span>{
+
+    <span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> Map&lt;String, CallbackListener&gt; listeners = <span class="hljs-keyword">new</span> ConcurrentHashMap&lt;String, CallbackListener&gt;();
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-title">CallbackServiceImpl</span><span class="hljs-params">()</span> </span>{
+        Thread t = <span class="hljs-keyword">new</span> Thread(<span class="hljs-keyword">new</span> Runnable() {
+            <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span><span class="hljs-params">()</span> </span>{
+                <span class="hljs-keyword">while</span>(<span class="hljs-keyword">true</span>) {
+                    <span class="hljs-keyword">try</span> {
+                        <span class="hljs-keyword">for</span>(Map.Entry&lt;String, CallbackListener&gt; entry : listeners.entrySet()){
+                           <span class="hljs-keyword">try</span> {
+                               entry.getValue().changed(getChanged(entry.getKey()));
+                           } <span class="hljs-keyword">catch</span> (Throwable t) {
+                               listeners.remove(entry.getKey());
+                           }
+                        }
+                        Thread.sleep(<span class="hljs-number">5000</span>); <span class="hljs-comment">// Timed trigger change notification</span>
+                    } <span class="hljs-keyword">catch</span> (Throwable t) { <span class="hljs-comment">// Defense fault tolerance</span>
+                        t.printStackTrace();
+                    }
+                }
+            }
+        });
+        t.setDaemon(<span class="hljs-keyword">true</span>);
+        t.start();
+    }
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">addListener</span><span class="hljs-params">(String key, CallbackListener listener)</span> </span>{
+        listeners.put(key, listener);
+        listener.changed(getChanged(key)); <span class="hljs-comment">// send change notification</span>
+    }
+
+    <span class="hljs-function"><span class="hljs-keyword">private</span> String <span class="hljs-title">getChanged</span><span class="hljs-params">(String key)</span> </span>{
+        <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;Changed: &quot;</span> + <span class="hljs-keyword">new</span> SimpleDateFormat(<span class="hljs-string">&quot;yyyy-MM-dd HH:mm:ss&quot;</span>).format(<span class="hljs-keyword">new</span> Date());
+    }
+}
 </code></pre>
 <h2 id="example-of-service-provider-configuration">Example of service provider configuration</h2>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>callbackService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.callback.impl.CallbackServiceImpl<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.callback.CallbackService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>callbackService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">connections</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>1<span class="token punctuation">&quot;</span></span> <span class="token attr-name">callbacks</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>1000<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>addListener<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>argument</span> <span class="token attr-name">index</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>1<span class="token punctuation">&quot;</span></span> <span class="token attr-name">callback</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-        <span class="token comment" spellcheck="true">&lt;!--also can via specified argument type--&gt;</span>
-        <span class="token comment" spellcheck="true">&lt;!--&lt;dubbo:argument type=&quot;com.demo.CallbackListener&quot; callback=&quot;true&quot; /&gt;--&gt;</span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>method</span><span class="token punctuation">&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">bean</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;callbackService&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;com.callback.impl.CallbackServiceImpl&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.callback.CallbackService&quot;</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;callbackService&quot;</span> <span class="hljs-attr">connections</span>=<span class="hljs-string">&quot;1&quot;</span> <span class="hljs-attr">callbacks</span>=<span class="hljs-string">&quot;1000&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;addListener&quot;</span>&gt;</span>
+        <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:argument</span> <span class="hljs-attr">index</span>=<span class="hljs-string">&quot;1&quot;</span> <span class="hljs-attr">callback</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
+        <span class="hljs-comment">&lt;!--also can via specified argument type--&gt;</span>
+        <span class="hljs-comment">&lt;!--&lt;dubbo:argument type=&quot;com.demo.CallbackListener&quot; callback=&quot;true&quot; /&gt;--&gt;</span>
+    <span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:method</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
 <h2 id="example-of-service-consumer-configuration">Example of service consumer configuration</h2>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>callbackService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.callback.CallbackService<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;callbackService&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.callback.CallbackService&quot;</span> /&gt;</span>
 </code></pre>
 <h2 id="example-of-service-consumer-call">Example of service consumer call</h2>
-<pre class="language-"><code class="lang-java">ClassPathXmlApplicationContext context <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ClassPathXmlApplicationContext</span><span class="token punctuation">(</span><span class="token string">&quot;classpath:consumer.xml&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-context<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">ClassPathXmlApplicationContext context = <span class="hljs-keyword">new</span> ClassPathXmlApplicationContext(<span class="hljs-string">&quot;classpath:consumer.xml&quot;</span>);
+context.start();
 
-CallbackService callbackService <span class="token operator">=</span> <span class="token punctuation">(</span>CallbackService<span class="token punctuation">)</span> context<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">&quot;callbackService&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+CallbackService callbackService = (CallbackService) context.getBean(<span class="hljs-string">&quot;callbackService&quot;</span>);
 
-callbackService<span class="token punctuation">.</span><span class="token function">addListener</span><span class="token punctuation">(</span><span class="token string">&quot;http://10.20.160.198/wiki/display/dubbo/foo.bar&quot;</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">CallbackListener</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">changed</span><span class="token punctuation">(</span>String msg<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">&quot;callback1:&quot;</span> <span class="token operator">+</span> msg<span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+callbackService.addListener(<span class="hljs-string">&quot;http://10.20.160.198/wiki/display/dubbo/foo.bar&quot;</span>, <span class="hljs-keyword">new</span> CallbackListener(){
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">changed</span><span class="hljs-params">(String msg)</span> </span>{
+        System.out.println(<span class="hljs-string">&quot;callback1:&quot;</span> + msg);
+    }
+});
 </code></pre>
 <p><strong>NOTE</strong> <code>2.0.6+</code> version supported.</p>
 
@@ -1534,7 +1526,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.23 Callback parameter","level":"1.7.23","depth":2,"next":{"title":"6.24 Events notify","level":"1.7.24","depth":2,"path":"demos/events-notify.md","ref":"./demos/events-notify.md","articles":[]},"previous":{"title":"6.22 Local call","level":"1.7.22","depth":2,"path":"demos/local-call.md","ref":"./demos/local-call.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/callback-parameter.md","mtime":"2017-12-26T02:28:31.609Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.23 Callback parameter","level":"1.7.23","depth":2,"next":{"title":"6.24 Events notify","level":"1.7.24","depth":2,"path":"demos/events-notify.md","ref":"./demos/events-notify.md","articles":[]},"previous":{"title":"6.22 Local call","level":"1.7.22","depth":2,"path":"demos/local-call.md","ref":"./demos/local-call.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/callback-parameter.md","mtime":"2018-04-13T06:52:30.936Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1544,30 +1536,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/concurrency-control.html b/books/dubbo-user-book-en/demos/concurrency-control.html
index b18262c2..5f438aa8 100644
--- a/books/dubbo-user-book-en/demos/concurrency-control.html
+++ b/books/dubbo-user-book-en/demos/concurrency-control.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1402,41 +1394,49 @@ <h1>
                                 
                                 <h1 id="parallel-control">Parallel control</h1>
 <h2 id="example-of-configuration">Example of configuration</h2>
-<h3 id="example-1-control-the-concurrency-of-all-method-for-a-specified-service-interface-at-server-side">Example 1: Control the concurrency of all method for a specified service interface at server-side</h3>
+<ul>
+<li>Example 1: Control the concurrency of all method for a specified service interface at server-side</li>
+</ul>
 <p>Limit each method of <code>com.foo.BarService</code> to no more than 10 concurrent server-side executions (or take up thread pool threads):</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">executes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">executes</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
 </code></pre>
-<h3 id="example-2-control-the-concurrency-of-specified-method-for-a-specified-service-interface-at-server-side">Example 2: Control the concurrency of specified method for a specified service interface at server-side</h3>
+<ul>
+<li>Example 2: Control the concurrency of specified method for a specified service interface at server-side</li>
+</ul>
 <p>Limit the <code>sayHello</code> method of <code>com.foo.BarService</code> to no more than 10 concurrent server-side executions(or take up thread pool threads):</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>sayHello<span class="token punctuation">&quot;</span></span> <span class="token attr-name">executes</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;sayHello&quot;</span> <span class="hljs-attr">executes</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
-<h3 id="example-3-control-the-concurrency-of-all-method-for-a-specified-service-interface-at-client-side">Example 3: Control the concurrency of all method for a specified service interface at client-side</h3>
-<p>Limit each method of <code>com.foo.BarService</code> to no more than 10 concurrent client-side executions (or take up thread pool threads):</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">actives</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<ul>
+<li><p>Example 3: Control the concurrency of all method for a specified service interface at client-side
+Limit each method of <code>com.foo.BarService</code> to no more than 10 concurrent client-side executions (or take up thread pool threads):</p>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">actives</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">actives</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">actives</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
 </code></pre>
-<h3 id="example-4-control-the-concurrency-of-specified-method-for-a-specified-service-interface-at-client-side">Example 4: Control the concurrency of specified method for a specified service interface at client-side</h3>
-<p>Limit the <code>sayHello</code> method of <code>com.foo.BarService</code> to no more than 10 concurrent client-side executions(or take up thread pool threads):</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>sayHello<span class="token punctuation">&quot;</span></span> <span class="token attr-name">actives</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+</li>
+<li><p>Example 4: Control the concurrency of specified method for a specified service interface at client-side
+Limit the <code>sayHello</code> method of <code>com.foo.BarService</code> to no more than 10 concurrent client-side executions(or take up thread pool threads):</p>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span>&gt;</span>
+  <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;sayHello&quot;</span> <span class="hljs-attr">actives</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
+</li>
+</ul>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>sayHello<span class="token punctuation">&quot;</span></span> <span class="token attr-name">actives</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;sayHello&quot;</span> <span class="hljs-attr">actives</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
-<p>If <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span></span> <span class="token attr-name">service</span><span class="token punctuation">&gt;</span></span></code> and <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span></span> <span class="token attr-name">reference</span><span class="token punctuation">&gt;</span></span></code> are both configured with <code>actives</code>,<code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span></code> is preferred.Ref to:<a href="user-guide-configuration#&#x914D;&#x7F6E;&#x8986;&#x76D6;">Configuration coverage strategy</a>&#x3002;</p>
+<p>If <code>&lt;dubbo:service&gt;</code> and <code>&lt;dubbo:reference&gt;</code> are both configured with <code>actives</code>,<code>&lt;dubbo:reference&gt;</code> is preferred.Ref to:<a href="config-rule.html">Configuration coverage strategy</a>.</p>
 <h2 id="load-balance">Load Balance</h2>
 <p>You can config the <code>loadbalance</code> attribute with <code>leastactive</code> at server-side or client-side,then the framework will make consumer call the minimum number of concurrent one.</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">loadbalance</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>leastactive<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">loadbalance</span>=<span class="hljs-string">&quot;leastactive&quot;</span> /&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">loadbalance</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>leastactive<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">loadbalance</span>=<span class="hljs-string">&quot;leastactive&quot;</span> /&gt;</span>
 </code></pre>
 
                                 
@@ -1481,7 +1481,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"next":{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"path":"demos/config-connections.md","ref":"./demos/config-connections.md","articles":[]},"previous":{"title":"6.27 Delay publish","level":"1.7.27","depth":2,"path":"demos/delay-publish.md","ref":"./demos/delay-publish.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/concurrency-control.md","mtime":"2017-12-26T02:28:31.609Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"next":{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"path":"demos/config-connections.md","ref":"./demos/config-connections.md","articles":[]},"previous":{"title":"6.27 Delay publish","level":"1.7.27","depth":2,"path":"demos/delay-publish.md","ref":"./demos/delay-publish.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/concurrency-control.md","mtime":"2018-03-19T06:46:50.940Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1491,30 +1491,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/config-connections.html b/books/dubbo-user-book-en/demos/config-connections.html
index 14d7b9cc..6ee18f95 100644
--- a/books/dubbo-user-book-en/demos/config-connections.html
+++ b/books/dubbo-user-book-en/demos/config-connections.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1403,20 +1395,20 @@ <h1>
                                 <h1 id="config-connections">Config connections</h1>
 <h2 id="control-connections-at-server-side">Control connections at server-side</h2>
 <p>Limit server-side accept to no more than 10 connections</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>provider</span> <span class="token attr-name">protocol</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">accepts</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:provider</span> <span class="hljs-attr">protocol</span>=<span class="hljs-string">&quot;dubbo&quot;</span> <span class="hljs-attr">accepts</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">accepts</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;dubbo&quot;</span> <span class="hljs-attr">accepts</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
 </code></pre>
 <h2 id="control-connections-at-client-side">Control connections at client-side</h2>
 <p>Limit client-side creating connection to no more than 10 connections for interface <code>com.foo.BarService</code>.</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">connections</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">connections</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">connections</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>10<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">connections</span>=<span class="hljs-string">&quot;10&quot;</span> /&gt;</span>
 </code></pre>
 <p><strong>NOTE:</strong> If used default protocol(<code>dubbo</code> protocol), and the value of  <code>connections</code> attribute is great than 0,then each service reference will has itself connection,else all service which belong to same remote server will share only one connection. In this framework,we called <code>private</code> connection or <code>share</code> connection.</p>
-<p>If <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span></code> and <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span></code> are both configured accepts/connections,<code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span></code> is preferred,Ref to <a href="user-guide-configuration#&#x914D;&#x7F6E;&#x8986;&#x76D6;">Configuration coverage strategy</a>&#x3002;</p>
+<p>If <code>&lt;dubbo:service&gt;</code> and <code>&lt;dubbo:reference&gt;</code> are both configured accepts/connections,<code>&lt;dubbo:reference&gt;</code> is preferred,Ref to <a href="http://dubbo.apache.org/books/dubbo-user-book-en/demos/config-rule.html" target="_blank">Configuration coverage strategy</a>.</p>
 <ul>
 <li>: Because connection is connect on Server,so configure at Provider.</li>
 </ul>
@@ -1463,7 +1455,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"next":{"title":"6.30 Lazy connect","level":"1.7.30","depth":2,"path":"demos/lazy-connect.md","ref":"./demos/lazy-connect.md","articles":[]},"previous":{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"path":"demos/concurrency-control.md","ref":"./demos/concurrency-control.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/config-connections.md","mtime":"2017-12-26T02:28:31.609Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"next":{"title":"6.30 Lazy connect","level":"1.7.30","depth":2,"path":"demos/lazy-connect.md","ref":"./demos/lazy-connect.md","articles":[]},"previous":{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"path":"demos/concurrency-control.md","ref":"./demos/concurrency-control.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/config-connections.md","mtime":"2018-04-13T06:52:30.936Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1473,30 +1465,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/config-rule.html b/books/dubbo-user-book-en/demos/config-rule.html
index caef1be7..e2d81759 100644
--- a/books/dubbo-user-book-en/demos/config-rule.html
+++ b/books/dubbo-user-book-en/demos/config-rule.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -65,7 +57,7 @@
     <link rel="shortcut icon" href="../gitbook/images/favicon.ico" type="image/x-icon">
 
     
-    <link rel="next" href="service-downgrade.md" />
+    <link rel="next" href="service-donwngrade.html" />
     
     
     <link rel="prev" href="routing-rule.html" />
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1402,9 +1394,9 @@ <h1>
                                 
                                 <h1 id="configure-rule">Configure rule</h1>
 <p>Write then dynamic configuration to the registry center,This feature is usually done by the monitoring center or the center&apos;s page.</p>
-<pre class="language-"><code class="lang-java">RegistryFactory registryFactory <span class="token operator">=</span> ExtensionLoader<span class="token punctuation">.</span><span class="token function">getExtensionLoader</span><span class="token punctuation">(</span>RegistryFactory<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAdaptiveExtension</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-Registry registry <span class="token operator">=</span> registryFactory<span class="token punctuation">.</span><span class="token function">getRegistry</span><span class="token punctuation">(</span>URL<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span><span class="token string">&quot;zookeeper://10.20.153.10:2181&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-registry<span class="token punctuation">.</span><span class="token function">register</span><span class="token punctuation">(</span>URL<span class="token punctuation">.</span><span class="token function">valueOf</span><span class="token punctuation">(</span><span class="token string">&quot;override://0.0.0.0/com.foo.BarService?category=configurators&amp;dynamic=false&amp;application=foo&amp;timeout=1000&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
+Registry registry = registryFactory.getRegistry(URL.valueOf(<span class="hljs-string">&quot;zookeeper://10.20.153.10:2181&quot;</span>));
+registry.register(URL.valueOf(<span class="hljs-string">&quot;override://0.0.0.0/com.foo.BarService?category=configurators&amp;dynamic=false&amp;application=foo&amp;timeout=1000&quot;</span>));
 </code></pre>
 <p>In the config override url&#xFF1A;</p>
 <ul>
@@ -1420,16 +1412,16 @@ <h1 id="configure-rule">Configure rule</h1>
 <p>Example&#xFF1A;</p>
 <ol>
 <li><p>Disable service provider.(Usually used to temporarily kick off a provider machine, similar to the prohibition of consumer access, please use the routing rules)</p>
-<pre class="language-"><code> override://10.20.153.10/com.foo.BarService?category=configurators&amp;dynamic=false&amp;disbaled=true
+<pre><code> override://10.20.153.10/com.foo.BarService?category=configurators&amp;dynamic=false&amp;disbaled=true
 </code></pre></li>
 <li><p>Adjustment weight:(Usually used to capacity assessment,default is 100)</p>
-<pre class="language-"><code> override://10.20.153.10/com.foo.BarService?category=configurators&amp;dynamic=false&amp;weight=200
+<pre><code> override://10.20.153.10/com.foo.BarService?category=configurators&amp;dynamic=false&amp;weight=200
 </code></pre></li>
 <li><p>Adjustment load balance strategy.(default random)</p>
-<pre class="language-"><code> override://10.20.153.10/com.foo.BarService?category=configurators&amp;dynamic=false&amp;loadbalance=leastactive
+<pre><code> override://10.20.153.10/com.foo.BarService?category=configurators&amp;dynamic=false&amp;loadbalance=leastactive
 </code></pre></li>
 <li><p>Service downgrade:(Usually used to temporarily mask an error of non-critical services)</p>
-<pre class="language-"><code> override://0.0.0.0/com.foo.BarService?category=configurators&amp;dynamic=false&amp;application=foo&amp;mock=force:return+null
+<pre><code> override://0.0.0.0/com.foo.BarService?category=configurators&amp;dynamic=false&amp;application=foo&amp;mock=force:return+null
 </code></pre></li>
 </ol>
 <p><strong>NOTE</strong>: <code>2.2.0+</code> version supported.</p>
@@ -1465,7 +1457,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
                 </a>
                 
                 
-                <a href="service-downgrade.md" class="navigation navigation-next " aria-label="Next page: 6.35 Service downgrade">
+                <a href="service-donwngrade.html" class="navigation navigation-next " aria-label="Next page: 6.35 Service downgrade">
                     <i class="fa fa-angle-right"></i>
                 </a>
                 
@@ -1476,7 +1468,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.34 Configuration rule","level":"1.7.34","depth":2,"next":{"title":"6.35 Service downgrade","level":"1.7.35","depth":2,"path":"demos/service-downgrade.md","ref":"./demos/service-downgrade.md","articles":[]},"previous":{"title":"6.33 Routing rule","level":"1.7.33","depth":2,"path":"demos/routing-rule.md","ref":"./demos/routing-rule.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/config-rule.md","mtime":"2017-12-26T02:28:31.610Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.34 Configuration rule","level":"1.7.34","depth":2,"next":{"title":"6.35 Service downgrade","level":"1.7.35","depth":2,"path":"demos/service-donwngrade.md","ref":"./demos/service-donwngrade.md","articles":[]},"previous":{"title":"6.33 Routing rule","level":"1.7.33","depth":2,"path":"demos/routing-rule.md","ref":"./demos/routing-rule.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/config-rule.md","mtime":"2018-03-19T06:46:50.941Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1486,30 +1478,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/context.html b/books/dubbo-user-book-en/demos/context.html
index 2f320806..8685d44f 100644
--- a/books/dubbo-user-book-en/demos/context.html
+++ b/books/dubbo-user-book-en/demos/context.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1404,31 +1396,31 @@ <h1 id="context-information">Context Information</h1>
 <p>All environment information of during the current call will put into the context,and all configuration information will convert the parameters of <code>URL</code> instance,Ref to the column of <strong>URL parameters</strong> at the <a href="../references/xml/introduction.html">schema configuration reference book</a></p>
 <p><code>RpcContext</code> is a temporary status recorder of <code>ThreadLocal</code>,when accept <code>RPC</code> request or send <code>RPC</code> request,The <code>RpcContext</code> will be  changed.Such as: <code>A</code> call <code>B</code> and <code>B</code> call <code>C</code>. On <code>B</code> machine,before <code>B</code> call <code>C</code>,the <code>RpcContext</code> will record the information of <code>A</code> call <code>B</code>.After <code>B</code> call <code>C</code>,the <code>RpcContext</code> record the information of <code>B</code> call <code>C</code>.</p>
 <h2 id="at-service-consumer">At service consumer</h2>
-<pre class="language-"><code class="lang-java"><span class="token comment" spellcheck="true">// remote invoke</span>
-xxxService<span class="token punctuation">.</span><span class="token function">xxx</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// if return true,then the current side is consumer.</span>
-<span class="token keyword">boolean</span> isConsumerSide <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">isConsumerSide</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// get the provider ip address of the last invoke.</span>
-String serverIP <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getRemoteHost</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// because all configuration information has convert the URL&apos;s  parameters,so at this place can get the application parameter value.</span>
-String application <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getUrl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getParameter</span><span class="token punctuation">(</span><span class="token string">&quot;application&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// Note:every rpc invoke,then context will be changed.</span>
-yyyService<span class="token punctuation">.</span><span class="token function">yyy</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-comment">// remote invoke</span>
+xxxService.xxx();
+<span class="hljs-comment">// if return true,then the current side is consumer.</span>
+<span class="hljs-keyword">boolean</span> isConsumerSide = RpcContext.getContext().isConsumerSide();
+<span class="hljs-comment">// get the provider ip address of the last invoke.</span>
+String serverIP = RpcContext.getContext().getRemoteHost();
+<span class="hljs-comment">// because all configuration information has convert the URL&apos;s  parameters,so at this place can get the application parameter value.</span>
+String application = RpcContext.getContext().getUrl().getParameter(<span class="hljs-string">&quot;application&quot;</span>);
+<span class="hljs-comment">// Note:every rpc invoke,then context will be changed.</span>
+yyyService.yyy();
 </code></pre>
 <h2 id="at-service-provider">At service provider</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">XxxServiceImpl</span> <span class="token keyword">implements</span> <span class="token class-name">XxxService</span> <span class="token punctuation">{</span>
-
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">xxx</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token comment" spellcheck="true">// if return true,then the current side is provider.</span>
-        <span class="token keyword">boolean</span> isProviderSide <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">isProviderSide</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token comment" spellcheck="true">// get the invoker ip</span>
-        String clientIP <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getRemoteHost</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token comment" spellcheck="true">// because all configuration information has convert the URL&apos;s  parameters,so at this place can get the application parameter value.</span>
-        String application <span class="token operator">=</span> RpcContext<span class="token punctuation">.</span><span class="token function">getContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getUrl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getParameter</span><span class="token punctuation">(</span><span class="token string">&quot;application&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-        <span class="token comment" spellcheck="true">// Note:every rpc invoke,then context will be changed.</span>
-        yyyService<span class="token punctuation">.</span><span class="token function">yyy</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">XxxServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">XxxService</span> </span>{
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">xxx</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-comment">// if return true,then the current side is provider.</span>
+        <span class="hljs-keyword">boolean</span> isProviderSide = RpcContext.getContext().isProviderSide();
+        <span class="hljs-comment">// get the invoker ip</span>
+        String clientIP = RpcContext.getContext().getRemoteHost();
+        <span class="hljs-comment">// because all configuration information has convert the URL&apos;s  parameters,so at this place can get the application parameter value.</span>
+        String application = RpcContext.getContext().getUrl().getParameter(<span class="hljs-string">&quot;application&quot;</span>);
+        <span class="hljs-comment">// Note:every rpc invoke,then context will be changed.</span>
+        yyyService.yyy();;
+    }
+}
 </code></pre>
 
                                 
@@ -1473,7 +1465,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.19 Context","level":"1.7.19","depth":2,"next":{"title":"6.20 Attachment","level":"1.7.20","depth":2,"path":"demos/attachment.md","ref":"./demos/attachment.md","articles":[]},"previous":{"title":"6.18 Echo service","level":"1.7.18","depth":2,"path":"demos/echo-service.md","ref":"./demos/echo-service.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/context.md","mtime":"2017-12-26T02:28:31.610Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.19 Context","level":"1.7.19","depth":2,"next":{"title":"6.20 Attachment","level":"1.7.20","depth":2,"path":"demos/attachment.md","ref":"./demos/attachment.md","articles":[]},"previous":{"title":"6.18 Echo service","level":"1.7.18","depth":2,"path":"demos/echo-service.md","ref":"./demos/echo-service.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/context.md","mtime":"2018-03-19T06:46:50.941Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1483,30 +1475,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/delay-publish.html b/books/dubbo-user-book-en/demos/delay-publish.html
index 772ef9cb..3a5fdc01 100644
--- a/books/dubbo-user-book-en/demos/delay-publish.html
+++ b/books/dubbo-user-book-en/demos/delay-publish.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1403,29 +1395,29 @@ <h1>
                                 <h1 id="delay-publish-service">Delay publish service</h1>
 <p>If your service need time to warm up.such as:initialization cache,or another reference resources has to be ready.so you can use the delay feature for delay publish service.</p>
 <h2 id="delay-five-second-publish">Delay five second publish</h2>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">delay</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>5000<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">delay</span>=<span class="hljs-string">&quot;5000&quot;</span> /&gt;</span>
 </code></pre>
 <h2 id="delay-until-spring-initialization-is-complete-before-exposing-the-service">Delay until Spring initialization is complete before exposing the service</h2>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">delay</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>-1<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">delay</span>=<span class="hljs-string">&quot;-1&quot;</span> /&gt;</span>
 </code></pre>
 <h3 id="the-initialization-deadlock-problem-of-spring-2x">The initialization deadlock problem of Spring 2.x</h3>
 <h4 id="trigger-condition">Trigger condition</h4>
-<p>The service has already published when <code>Spring</code> parse the <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token punctuation">/&gt;</span></span></code> element,but the <code>Spring</code> is still initializing other beans.If there is a request coming in, and the service implementation class has a call to <code>applicationContext.getBean ()</code> usage.</p>
+<p>The service has already published when <code>Spring</code> parse the <code>&lt;dubbo:service /&gt;</code> element,but the <code>Spring</code> is still initializing other beans.If there is a request coming in, and the service implementation class has a call to <code>applicationContext.getBean ()</code> usage.</p>
 <ol>
-<li><p>Request thread applicationContext.getBean () call, the first synchronization <code>singletonObjects</code> determine whether the existence of the bean, the synchronization does not exist to initialize the <code>beanDefinitionMap</code>, and re-synchronize <code>singletonObjects</code> write Bean instance cache.</p>
+<li><p>Request thread applicationContext.getBean() call, the first synchronization <code>singletonObjects</code> determine whether the existence of the bean, the synchronization does not exist to initialize the <code>beanDefinitionMap</code>, and re-synchronize <code>singletonObjects</code> write Bean instance cache.</p>
 <p> <img src="../sources/images/lock-get-bean.jpg" alt="deadlock">  </p>
 </li>
-<li><p>But the <code>Spring</code> initialization thread,because need to determine the <code>Bean</code> is exist,Directly synchronize beanDefinitionMap to initialize, and synchronize singletonObjects write Bean instance cache.
- <img src="../sources/images/lock-init-context.jpg" alt="/user-guide/images/lock-init-context.jpg">  </p>
+<li><p>But the <code>Spring</code> initialization thread,because need to determine the <code>Bean</code> is exist,Directly synchronize beanDefinitionMap to initialize, and synchronize singletonObjects write Bean instance cache.</p>
+<p> <img src="../sources/images/lock-init-context.jpg" alt="/user-guide/images/lock-init-context.jpg">  </p>
 </li>
 </ol>
 <p>This will cause the getBean thread to lock the singletonObjects first, then lock the beanDefinitionMap, and lock the singletonObjects again.The Spring initialization thread, the first lock beanDefinitionMap, then lock singletonObjects. Reverse lock thread deadlock, can not provide services, can not start.</p>
 <h4 id="avoid-ways">Avoid ways</h4>
 <ol>
-<li>It is highly recommended not to call applicationContext.getBean () in the service implementation class, all using Spring&apos;s beans using IoC injection.</li>
-<li>If you really want to tune getBean (), you can put the configuration of Dubbo Spring final loading.</li>
-<li>If you do not want to rely on the configuration order, you can use <code>&lt;dubbo: provider deplay =&quot; - 1 &quot;/&gt;</code> to make Dubbo expose the service after the Spring container has been initialized.</li>
-<li>If you use getBean () extensively, the equivalent of degenerating Spring to factory mode is to isolate Dubbo&apos;s service from a separate Spring container.</li>
+<li>It is highly recommended not to call applicationContext.getBean() in the service implementation class, all using Spring&apos;s beans using IoC injection.</li>
+<li>If you really want to tune getBean(), you can put the configuration of Dubbo Spring final loading.</li>
+<li>If you do not want to rely on the configuration order, you can use <code>&lt;dubbo:provider delay =&quot;-1&quot;/&gt;</code> to make Dubbo expose the service after the Spring container has been initialized.</li>
+<li>If you use getBean() extensively, the equivalent of degenerating Spring to factory mode is to isolate Dubbo&apos;s service from a separate Spring container.</li>
 </ol>
 <blockquote id="fn_1">
 <sup>1</sup>. Base on the  <code>ContextRefreshedEvent</code> event of the  Spring to trigger publish service.<a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
@@ -1473,7 +1465,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.27 Delay publish","level":"1.7.27","depth":2,"next":{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"path":"demos/concurrency-control.md","ref":"./demos/concurrency-control.md","articles":[]},"previous":{"title":"6.26 Local mock","level":"1.7.26","depth":2,"path":"demos/local-mock.md","ref":"./demos/local-mock.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/delay-publish.md","mtime":"2017-12-26T02:28:31.610Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.27 Delay publish","level":"1.7.27","depth":2,"next":{"title":"6.28 Concurrency control","level":"1.7.28","depth":2,"path":"demos/concurrency-control.md","ref":"./demos/concurrency-control.md","articles":[]},"previous":{"title":"6.26 Local mock","level":"1.7.26","depth":2,"path":"demos/local-mock.md","ref":"./demos/local-mock.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/delay-publish.md","mtime":"2018-04-05T15:31:00.743Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1483,30 +1475,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/distributed-transaction.html b/books/dubbo-user-book-en/demos/distributed-transaction.html
index cbd35be2..985f11aa 100644
--- a/books/dubbo-user-book-en/demos/distributed-transaction.html
+++ b/books/dubbo-user-book-en/demos/distributed-transaction.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1447,7 +1439,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.42 Distributed transaction","level":"1.7.42","depth":2,"next":{"title":"6.43 Dumping thread stack automatically","level":"1.7.43","depth":2,"path":"demos/dump.md","ref":"./demos/dump.md","articles":[]},"previous":{"title":"6.41 Reference config cache","level":"1.7.41","depth":2,"path":"demos/reference-config-cache.md","ref":"./demos/reference-config-cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/distributed-transaction.md","mtime":"2017-12-26T02:28:31.611Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.42 Distributed transaction","level":"1.7.42","depth":2,"next":{"title":"6.43 Dumping thread stack automatically","level":"1.7.43","depth":2,"path":"demos/dump.md","ref":"./demos/dump.md","articles":[]},"previous":{"title":"6.41 Reference config cache","level":"1.7.41","depth":2,"path":"demos/reference-config-cache.md","ref":"./demos/reference-config-cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/distributed-transaction.md","mtime":"2018-03-19T06:46:50.941Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1457,30 +1449,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/dump.html b/books/dubbo-user-book-en/demos/dump.html
index e21cbf7f..50bdf46e 100644
--- a/books/dubbo-user-book-en/demos/dump.html
+++ b/books/dubbo-user-book-en/demos/dump.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1408,12 +1400,12 @@ <h1 id="dump">Dump</h1>
 <li>Export interval&#xFF0C;The shortest interval allows you to export every 10 minutes</li>
 </ul>
 <p>Specified export file path:</p>
-<pre class="language-"><code class="lang-properties"><span class="token comment" spellcheck="true"># dubbo.properties</span>
-<span class="token attr-name">dubbo.application.dump.directory</span><span class="token punctuation">=</span><span class="token attr-value">/tmp</span>
+<pre><code class="lang-properties"># dubbo.properties
+dubbo.application.dump.directory=/tmp
 </code></pre>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>application</span> <span class="token attr-name">...</span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>parameter</span> <span class="token attr-name">key</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dump.directory<span class="token punctuation">&quot;</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>/tmp<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>application</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:application</span> <span class="hljs-attr">...</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:parameter</span> <span class="hljs-attr">key</span>=<span class="hljs-string">&quot;dump.directory&quot;</span> <span class="hljs-attr">value</span>=<span class="hljs-string">&quot;/tmp&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:application</span>&gt;</span>
 </code></pre>
 
                                 
@@ -1458,7 +1450,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.43 Dumping thread stack automatically","level":"1.7.43","depth":2,"next":{"title":"6.44 Netty4","level":"1.7.44","depth":2,"path":"demos/netty4.md","ref":"./demos/netty4.md","articles":[]},"previous":{"title":"6.42 Distributed transaction","level":"1.7.42","depth":2,"path":"demos/distributed-transaction.md","ref":"./demos/distributed-transaction.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/dump.md","mtime":"2017-12-26T02:28:31.611Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.43 Dumping thread stack automatically","level":"1.7.43","depth":2,"next":{"title":"6.44 Netty4","level":"1.7.44","depth":2,"path":"demos/netty4.md","ref":"./demos/netty4.md","articles":[]},"previous":{"title":"6.42 Distributed transaction","level":"1.7.42","depth":2,"path":"demos/distributed-transaction.md","ref":"./demos/distributed-transaction.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/dump.md","mtime":"2018-03-19T06:46:50.941Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1468,30 +1460,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/echo-service.html b/books/dubbo-user-book-en/demos/echo-service.html
index d7079736..9c945a35 100644
--- a/books/dubbo-user-book-en/demos/echo-service.html
+++ b/books/dubbo-user-book-en/demos/echo-service.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1404,18 +1396,18 @@ <h1 id="echo-testing">Echo Testing</h1>
 <p>Echo testing is used for check the service is available,Echo testing is performed according to the normal request flow and is able to test whether the entire call is unobstructed and can be used for monitoring.</p>
 <p>All the services will be automatically implemented <code>EchoService</code> interface,just cast any service reference to <code>EchoService</code> to use it.</p>
 <p>Spring configuration:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>memberService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.MemberService<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;memberService&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.xxx.MemberService&quot;</span> /&gt;</span>
 </code></pre>
 <p>The java code&#xFF1A;</p>
-<pre class="language-"><code class="lang-java"><span class="token comment" spellcheck="true">// reference the remote service</span>
-MemberService memberService <span class="token operator">=</span> ctx<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">&quot;memberService&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// case the service reference to EchoService</span>
-EchoService echoService <span class="token operator">=</span> <span class="token punctuation">(</span>EchoService<span class="token punctuation">)</span> memberService<span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-comment">// reference the remote service</span>
+MemberService memberService = ctx.getBean(<span class="hljs-string">&quot;memberService&quot;</span>);
+<span class="hljs-comment">// case the service reference to EchoService</span>
+EchoService echoService = (EchoService) memberService;
 
-<span class="token comment" spellcheck="true">// Echo test usability</span>
-String status <span class="token operator">=</span> echoService<span class="token punctuation">.</span>$<span class="token function">echo</span><span class="token punctuation">(</span><span class="token string">&quot;OK&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<span class="hljs-comment">// Echo test usability</span>
+String status = echoService.$echo(<span class="hljs-string">&quot;OK&quot;</span>);
 
-<span class="token keyword">assert</span><span class="token punctuation">(</span>status<span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span><span class="token string">&quot;OK&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<span class="hljs-keyword">assert</span>(status.equals(<span class="hljs-string">&quot;OK&quot;</span>));
 </code></pre>
 
                                 
@@ -1460,7 +1452,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.18 Echo service","level":"1.7.18","depth":2,"next":{"title":"6.19 Context","level":"1.7.19","depth":2,"path":"demos/context.md","ref":"./demos/context.md","articles":[]},"previous":{"title":"6.17 Generic service","level":"1.7.17","depth":2,"path":"demos/generic-service.md","ref":"./demos/generic-service.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/echo-service.md","mtime":"2017-12-26T02:28:31.611Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.18 Echo service","level":"1.7.18","depth":2,"next":{"title":"6.19 Context","level":"1.7.19","depth":2,"path":"demos/context.md","ref":"./demos/context.md","articles":[]},"previous":{"title":"6.17 Generic service","level":"1.7.17","depth":2,"path":"demos/generic-service.md","ref":"./demos/generic-service.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/echo-service.md","mtime":"2018-03-19T06:46:50.942Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1470,30 +1462,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/events-notify.html b/books/dubbo-user-book-en/demos/events-notify.html
index b306c189..d0556228 100644
--- a/books/dubbo-user-book-en/demos/events-notify.html
+++ b/books/dubbo-user-book-en/demos/events-notify.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1401,55 +1393,54 @@ <h1>
                                 <section class="normal markdown-section">
                                 
                                 <h1 id="event-notify">Event Notify</h1>
-<p>Before calling, after calling, when an exception occurs,will trigger <code>oninvoke</code>&#x3001;<code>onreturn</code>&#x3001;<code>onthrow</code> events.You can configure which method to notify when an event occurs.</p>
+<p>Before calling, after calling, when an exception occurs,will trigger <code>oninvoke</code>, <code>onreturn</code>, <code>onthrow</code> events.You can configure which method to notify when an event occurs.</p>
 <h2 id="service-interface">Service Interface</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">interface</span> <span class="token class-name">IDemoService</span> <span class="token punctuation">{</span>
-    <span class="token keyword">public</span> Person <span class="token function">get</span><span class="token punctuation">(</span><span class="token keyword">int</span> id<span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">IDemoService</span> </span>{
+    <span class="hljs-function"><span class="hljs-keyword">public</span> Person <span class="hljs-title">get</span><span class="hljs-params">(<span class="hljs-keyword">int</span> id)</span></span>;
+}
 </code></pre>
 <h2 id="service-provider-implement-the-service">Service provider implement the service.</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">class</span> <span class="token class-name">NormalDemoService</span> <span class="token keyword">implements</span> <span class="token class-name">IDemoService</span> <span class="token punctuation">{</span>
-    <span class="token keyword">public</span> Person <span class="token function">get</span><span class="token punctuation">(</span><span class="token keyword">int</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">Person</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> <span class="token string">&quot;charles`son&quot;</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">NormalDemoService</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">IDemoService</span> </span>{
+    <span class="hljs-function"><span class="hljs-keyword">public</span> Person <span class="hljs-title">get</span><span class="hljs-params">(<span class="hljs-keyword">int</span> id)</span> </span>{
+        <span class="hljs-keyword">return</span> <span class="hljs-keyword">new</span> Person(id, <span class="hljs-string">&quot;charles`son&quot;</span>, <span class="hljs-number">4</span>);
+    }
+}
 </code></pre>
 <h2 id="service-provider-configure-the-service-which-it-provided">Service provider configure the service which it provided.</h2>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>application</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>rpc-callback-demo<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>registry</span> <span class="token attr-name">address</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>http://10.20.160.198/wiki/display/dubbo/10.20.153.186<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>demoService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.dubbo.callback.implicit.NormalDemoService<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.dubbo.callback.implicit.IDemoService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>demoService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">version</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>1.0.0<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>cn<span class="token punctuation">&quot;</span></span><span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:application</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;rpc-callback-demo&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dubbo:registry</span> <span class="hljs-attr">address</span>=<span class="hljs-string">&quot;http://10.20.160.198/wiki/display/dubbo/10.20.153.186&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">bean</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;demoService&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;com.alibaba.dubbo.callback.implicit.NormalDemoService&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.alibaba.dubbo.callback.implicit.IDemoService&quot;</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;demoService&quot;</span> <span class="hljs-attr">version</span>=<span class="hljs-string">&quot;1.0.0&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;cn&quot;</span>/&gt;</span>
 </code></pre>
 <h2 id="declare-the-callback-interface-at-service-consumer-side">Declare the Callback interface at service consumer-side.</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">interface</span> <span class="token class-name">Notify</span> <span class="token punctuation">{</span>
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onreturn</span><span class="token punctuation">(</span>Person msg<span class="token punctuation">,</span> Integer id<span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onthrow</span><span class="token punctuation">(</span>Throwable ex<span class="token punctuation">,</span> Integer id<span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">Notify</span> </span>{
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onreturn</span><span class="hljs-params">(Person msg, Integer id)</span></span>;
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onthrow</span><span class="hljs-params">(Throwable ex, Integer id)</span></span>;
+}
 </code></pre>
 <h2 id="implement-the-callback-at-service-consumer-side">Implement the Callback at service consumer-side.</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">class</span> <span class="token class-name">NotifyImpl</span> <span class="token keyword">implements</span> <span class="token class-name">Notify</span> <span class="token punctuation">{</span>
-    <span class="token keyword">public</span> Map<span class="token operator">&lt;</span>Integer<span class="token punctuation">,</span> Person<span class="token operator">&gt;</span>    ret    <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token operator">&lt;</span>Integer<span class="token punctuation">,</span> Person<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token keyword">public</span> Map<span class="token operator">&lt;</span>Integer<span class="token punctuation">,</span> Throwable<span class="token operator">&gt;</span> errors <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token operator">&lt;</span>Integer<span class="token punctuation">,</span> Throwable<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onreturn</span><span class="token punctuation">(</span>Person msg<span class="token punctuation">,</span> Integer id<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">&quot;onreturn:&quot;</span> <span class="token operator">+</span> msg<span class="token punctuation">)</span><span class="token punctuation">;</span>
-        ret<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> msg<span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onthrow</span><span class="token punctuation">(</span>Throwable ex<span class="token punctuation">,</span> Integer id<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        errors<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span>id<span class="token punctuation">,</span> ex<span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">NotifyImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Notify</span> </span>{
+    <span class="hljs-keyword">public</span> Map&lt;Integer, Person&gt;    ret    = <span class="hljs-keyword">new</span> HashMap&lt;Integer, Person&gt;();
+    <span class="hljs-keyword">public</span> Map&lt;Integer, Throwable&gt; errors = <span class="hljs-keyword">new</span> HashMap&lt;Integer, Throwable&gt;();
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onreturn</span><span class="hljs-params">(Person msg, Integer id)</span> </span>{
+        System.out.println(<span class="hljs-string">&quot;onreturn:&quot;</span> + msg);
+        ret.put(id, msg);
+    }
+
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">onthrow</span><span class="hljs-params">(Throwable ex, Integer id)</span> </span>{
+        errors.put(id, ex);
+    }
+}
 </code></pre>
 <h2 id="configure-the-callback-at-service-consumer-side">Configure the Callback at service consumer-side.</h2>
-<pre class="language-"><code class="lang-xml">&lt;bean id =&quot;demoCallback&quot; class = &quot;com.alibaba.dubbo.callback.implicit.NofifyImpl&quot; /&gt;
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>demoService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.dubbo.callback.implicit.IDemoService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">version</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>1.0.0<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>cn<span class="token punctuation">&quot;</span></span> <span class="token punctuation">&gt;</span></span>
-      &lt;dubbo:method name=&quot;get&quot; async=&quot;true&quot; onreturn = &quot;demoCallback.onreturn&quot; onthrow=&quot;demoCallback.onthrow&quot; /&gt;
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">bean</span> <span class="hljs-attr">id</span> =<span class="hljs-string">&quot;demoCallback&quot;</span> <span class="hljs-attr">class</span> = &quot;<span class="hljs-attr">com.alibaba.dubbo.callback.implicit.NofifyImpl</span>&quot; /&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;demoService&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.alibaba.dubbo.callback.implicit.IDemoService&quot;</span> <span class="hljs-attr">version</span>=<span class="hljs-string">&quot;1.0.0&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;cn&quot;</span> &gt;</span>
+      <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;get&quot;</span> <span class="hljs-attr">async</span>=<span class="hljs-string">&quot;true&quot;</span> <span class="hljs-attr">onreturn</span> = &quot;<span class="hljs-attr">demoCallback.onreturn</span>&quot; <span class="hljs-attr">onthrow</span>=<span class="hljs-string">&quot;demoCallback.onthrow&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:reference</span>&gt;</span>
 </code></pre>
 <p><code>callback</code> and<code>async</code> functions are orthogonally decomposed. <code>async = true</code> means that the result is returned immediately.<code>onreturn</code> means that a callback is required.</p>
-<p>&#x4E24;&#x8005;&#x53E0;&#x52A0;&#x5B58;&#x5728;&#x4EE5;&#x4E0B;&#x51E0;&#x79CD;&#x7EC4;&#x5408;&#x60C5;&#x51B5; <sup><a href="#fn_2" id="reffn_2">2</a></sup>&#xFF1A;</p>
-<p>There are several situations with the tow attributes.</p>
+<p>There are several situations with the tow attributes<sup><a href="#fn_2" id="reffn_2">2</a></sup>.</p>
 <ul>
 <li>Asynchronous callback mode:<code>async=true onreturn=&quot;xxx&quot;</code>  </li>
 <li>Synchronous callback mode:<code>async=false onreturn=&quot;xxx&quot;</code>  </li>
@@ -1457,20 +1448,20 @@ <h2 id="configure-the-callback-at-service-consumer-side">Configure the Callback
 <li>Synchronous no callback:<code>async=true</code>  </li>
 </ul>
 <h2 id="testing-code">Testing code</h2>
-<pre class="language-"><code class="lang-java">IDemoService demoService <span class="token operator">=</span> <span class="token punctuation">(</span>IDemoService<span class="token punctuation">)</span> context<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">&quot;demoService&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-NofifyImpl notify <span class="token operator">=</span> <span class="token punctuation">(</span>NofifyImpl<span class="token punctuation">)</span> context<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">&quot;demoCallback&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token keyword">int</span> requestId <span class="token operator">=</span> <span class="token number">2</span><span class="token punctuation">;</span>
-Person ret <span class="token operator">=</span> demoService<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>requestId<span class="token punctuation">)</span><span class="token punctuation">;</span>
-Assert<span class="token punctuation">.</span><span class="token function">assertEquals</span><span class="token punctuation">(</span>null<span class="token punctuation">,</span> ret<span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">//for Test:Just used to illustrate the normal callback callback, the specific business decisions.</span>
-<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">10</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>notify<span class="token punctuation">.</span>ret<span class="token punctuation">.</span><span class="token function">containsKey</span><span class="token punctuation">(</span>requestId<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        Thread<span class="token punctuation">.</span><span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
-        <span class="token keyword">break</span><span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
-Assert<span class="token punctuation">.</span><span class="token function">assertEquals</span><span class="token punctuation">(</span>requestId<span class="token punctuation">,</span> notify<span class="token punctuation">.</span>ret<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>requestId<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">IDemoService demoService = (IDemoService) context.getBean(<span class="hljs-string">&quot;demoService&quot;</span>);
+NofifyImpl notify = (NofifyImpl) context.getBean(<span class="hljs-string">&quot;demoCallback&quot;</span>);
+<span class="hljs-keyword">int</span> requestId = <span class="hljs-number">2</span>;
+Person ret = demoService.get(requestId);
+Assert.assertEquals(<span class="hljs-keyword">null</span>, ret);
+<span class="hljs-comment">//for Test:Just used to illustrate the normal callback callback, the specific business decisions.</span>
+<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i &lt; <span class="hljs-number">10</span>; i++) {
+    <span class="hljs-keyword">if</span> (!notify.ret.containsKey(requestId)) {
+        Thread.sleep(<span class="hljs-number">200</span>);
+    } <span class="hljs-keyword">else</span> {
+        <span class="hljs-keyword">break</span>;
+    }
+}
+Assert.assertEquals(requestId, notify.ret.get(requestId).getId());
 </code></pre>
 <p><strong>NOTE</strong><code>2.0.7+</code> version,<code>async=false</code> is default.</p>
 
@@ -1516,7 +1507,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.24 Events notify","level":"1.7.24","depth":2,"next":{"title":"6.25 Local stub","level":"1.7.25","depth":2,"path":"demos/local-stub.md","ref":"./demos/local-stub.md","articles":[]},"previous":{"title":"6.23 Callback parameter","level":"1.7.23","depth":2,"path":"demos/callback-parameter.md","ref":"./demos/callback-parameter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/events-notify.md","mtime":"2017-12-26T02:28:31.612Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.24 Events notify","level":"1.7.24","depth":2,"next":{"title":"6.25 Local stub","level":"1.7.25","depth":2,"path":"demos/local-stub.md","ref":"./demos/local-stub.md","articles":[]},"previous":{"title":"6.23 Callback parameter","level":"1.7.23","depth":2,"path":"demos/callback-parameter.md","ref":"./demos/callback-parameter.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/events-notify.md","mtime":"2018-03-19T06:46:50.942Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1526,30 +1517,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/explicit-target.html b/books/dubbo-user-book-en/demos/explicit-target.html
index 83201c25..e2b4ad8d 100644
--- a/books/dubbo-user-book-en/demos/explicit-target.html
+++ b/books/dubbo-user-book-en/demos/explicit-target.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1404,20 +1396,19 @@ <h1 id="explicit-target">Explicit target</h1>
 <p>In the development and testing environment, it is often necessary to bypass the registry and test only designated service providers. In this case, point-to-point direct connection may be required, and the service provider will ignore the list of provider registration providers. The interface A configure Point-to-point, does not affect the B interface to obtain a list from the registry.</p>
 <p><img src="../sources/images/dubbo-directly.jpg" alt="/user-guide/images/dubbo-directly.jpg"></p>
 <h2 id="configure-with-xml">Configure with XML</h2>
-<p>If it is online demand needs the point-to-point feature,You can configure the specified provider url at <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span></code>.it will bypass the registry, multiple addresses separated by semicolons, the following configuration:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>xxxService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.alibaba.xxx.XxxService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">url</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo://localhost:20890<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<p>If it is online demand needs the point-to-point feature,You can configure the specified provider url at <code>&lt;dubbo:reference&gt;</code>.it will bypass the registry, multiple addresses separated by semicolons, the following configuration:</p>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;xxxService&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.alibaba.xxx.XxxService&quot;</span> <span class="hljs-attr">url</span>=<span class="hljs-string">&quot;dubbo://localhost:20890&quot;</span> /&gt;</span>
 </code></pre>
 <h2 id="configure-with-the--d-argument">Configure with the <code>-D</code> argument</h2>
 <p>Add the -D parameter mapping service address to the JVM startup parameters&#xFF1A;</p>
-<pre class="language-"><code class="lang-sh">java -Dcom.alibaba.xxx.XxxService<span class="token operator">=</span>dubbo://localhost:20890
+<pre><code class="lang-sh">java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890
 </code></pre>
-<h2 id="&#x901A;&#x8FC7;&#x6587;&#x4EF6;&#x6620;&#x5C04;">&#x901A;&#x8FC7;&#x6587;&#x4EF6;&#x6620;&#x5C04;</h2>
-<h2 id="configure-with-the-resolve-file">Configure with the resolve file.</h2>
-<p>If you have more services, you can also use file mapping to specify the mapping file path with <code>-Ddubbo.resolve.file</code>. This configuration takes precedence over the configuration in<code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span></span> <span class="token attr-name">reference</span><span class="token punctuation">&gt;</span></span></code>, for example:</p>
-<pre class="language-"><code class="lang-sh">java -Ddubbo.resolve.file<span class="token operator">=</span>xxx.properties
+<h2 id="configure-with-the-properties-file">Configure with the <code>.properties</code> file</h2>
+<p>If you have more services, you can also use file mapping to specify the mapping file path with <code>-Ddubbo.resolve.file</code>. This configuration takes precedence over the configuration in<code>&lt;dubbo: reference&gt;</code>, for example:</p>
+<pre><code class="lang-sh">java -Ddubbo.resolve.file=xxx.properties
 </code></pre>
 <p>Then add the configuration in the mapping file <code>xxx.properties</code>, where key is the service name and value is the service provider URL:</p>
-<pre class="language-"><code class="lang-properties"><span class="token attr-name">com.alibaba.xxx.XxxService</span><span class="token punctuation">=</span><span class="token attr-value">dubbo://localhost:20890</span>
+<pre><code class="lang-properties">com.alibaba.xxx.XxxService=dubbo://localhost:20890
 </code></pre>
 <p><strong>NOTE</strong> To avoid complicating the online environment, do not use this feature online and should only be used during the testing phase</p>
 
@@ -1463,7 +1454,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.5 Connecting certain provider straightly","level":"1.7.5","depth":2,"next":{"title":"6.6 Subscribe only","level":"1.7.6","depth":2,"path":"demos/subscribe-only.md","ref":"./demos/subscribe-only.md","articles":[]},"previous":{"title":"6.4 Thread model","level":"1.7.4","depth":2,"path":"demos/thread-model.md","ref":"./demos/thread-model.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/explicit-target.md","mtime":"2017-12-26T02:28:31.612Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.5 Connecting certain provider straightly","level":"1.7.5","depth":2,"next":{"title":"6.6 Subscribe only","level":"1.7.6","depth":2,"path":"demos/subscribe-only.md","ref":"./demos/subscribe-only.md","articles":[]},"previous":{"title":"6.4 Thread model","level":"1.7.4","depth":2,"path":"demos/thread-model.md","ref":"./demos/thread-model.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/explicit-target.md","mtime":"2018-03-19T06:46:50.942Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1473,30 +1464,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/fault-tolerent-strategy.html b/books/dubbo-user-book-en/demos/fault-tolerent-strategy.html
index c62b8e3b..d1b79396 100644
--- a/books/dubbo-user-book-en/demos/fault-tolerent-strategy.html
+++ b/books/dubbo-user-book-en/demos/fault-tolerent-strategy.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1406,25 +1398,25 @@ <h1 id="fault-tolerance-strategy">Fault Tolerance Strategy</h1>
 <p>The relationship between nodes:</p>
 <ul>
 <li>This <code>Invoker</code> is the callable Service&apos;s abstract of the<code>Provider</code>, and the <code>Invoker</code> packaging the<code>Provider</code>&apos;s address and <code>Service</code>&apos;s interface.</li>
-<li>The <code>Directory</code> represent multiple <code>Invoker</code>,You can think of it as <code>List<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>Invoker</span><span class="token punctuation">&gt;</span></span></code>,But unlike <code>List</code>,its value  can be dynamically changing.such as registry push changes</li>
+<li>The <code>Directory</code> represent multiple <code>Invoker</code>,You can think of it as <code>List&lt;Invoker&gt;</code>,But unlike <code>List</code>,its value  can be dynamically changing.such as registry push changes</li>
 <li>The <code>Cluster</code> disguises multiple<code>Invoker</code> in <code>Directory</code> as a<code>Invoker</code>,The upper transparent, masquerade process contains fault-tolerant logic, call failed, try another</li>
 <li>The <code>Router</code> is responsible for selecting subsets according to routing rules from multiple <code>Invoker</code>s, such as read-write separation, application isolation, etc.</li>
 <li><code>LoadBalance</code> is responsible for selecting a specific one from multiple<code>Invoker</code> for this call. The selection process includes the load balancing algorithm. If the call fails, it needs to be re-selected</li>
 </ul>
 <h2 id="cluster-fault-tolerant-mode">Cluster fault-tolerant mode</h2>
-<p>You can expand the cluster fault tolerance strategy, see:<a href="https://dubbo.gitbooks.io/dubbo-dev-book/impls/cluster.html" target="_blank">Cluster expansion</a></p>
+<p>You can expand the cluster fault tolerance strategy, see:<a href="http://dubbo.apache.org/books/dubbo-dev-book-en/impls/cluster.html" target="_blank">Cluster expansion</a></p>
 <h2 id="failover-cluster">Failover Cluster</h2>
-<p>Failure automatically switch, when there is failure, retry the other server (default). Usually used for read operations, but retries can result in longer delays. The times of retries can be set via <code>retries =&quot; 2 &quot;</code> (excluding the first time).</p>
+<p>Failure automatically switch, when there is failure, retry the other server (default). Usually used for read operations, but retries can result in longer delays. The times of retries can be set via <code>retries =2</code> (excluding the first time).</p>
 <p>The times of retries is configured as follows:</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">retries</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>2<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">retries</span>=<span class="hljs-string">&quot;2&quot;</span> /&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">retries</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>2<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">retries</span>=<span class="hljs-string">&quot;2&quot;</span> /&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>findFoo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">retries</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>2<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>reference</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;findFoo&quot;</span> <span class="hljs-attr">retries</span>=<span class="hljs-string">&quot;2&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:reference</span>&gt;</span>
 </code></pre>
 <h3 id="failfast-cluster">Failfast Cluster</h3>
 <p>Fast failure, only made a call, failure immediately error. Usually used for non-idempotent write operations, such as adding records</p>
@@ -1433,15 +1425,15 @@ <h3 id="failsafe-cluster">Failsafe Cluster</h3>
 <h3 id="failback-cluster">Failback Cluster</h3>
 <p>Failure automatically restored, failed to record the background request, regular retransmission. Usually used for message notification operations.</p>
 <h3 id="forking-cluster">Forking Cluster</h3>
-<p>Multiple servers are invoked in parallel, returning as soon as one succeeds. Usually used for real-time demanding read operations, but need to waste more service resources. The maximum number of parallelism can be set with <code>forks =&quot; 2 &quot;</code>.</p>
+<p>Multiple servers are invoked in parallel, returning as soon as one succeeds. Usually used for real-time demanding read operations, but need to waste more service resources. The maximum number of parallelism can be set with <code>forks=2</code>.</p>
 <h3 id="broadcast-cluster">Broadcast Cluster</h3>
 <p>Calling all providers broadcast, one by one call, any error is reported (<code>2.1.0+</code>). It is usually used to notify all providers to update local resource information such as caches or logs.</p>
 <h2 id="cluster-mode-configuration">Cluster mode configuration</h2>
 <p>Follow the example below to configure cluster mode on service providers and consumers</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">cluster</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>failsafe<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">cluster</span>=<span class="hljs-string">&quot;failsafe&quot;</span> /&gt;</span>
 </code></pre>
 <p>OR</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">cluster</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>failsafe<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">cluster</span>=<span class="hljs-string">&quot;failsafe&quot;</span> /&gt;</span>
 </code></pre>
 
                                 
@@ -1486,7 +1478,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.2 Fault-tolerent strategy","level":"1.7.2","depth":2,"next":{"title":"6.3 Load balance","level":"1.7.3","depth":2,"path":"demos/loadbalance.md","ref":"./demos/loadbalance.md","articles":[]},"previous":{"title":"6.1 Start check","level":"1.7.1","depth":2,"path":"demos/preflight-check.md","ref":"./demos/preflight-check.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/fault-tolerent-strategy.md","mtime":"2017-12-26T02:28:31.612Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.2 Fault-tolerent strategy","level":"1.7.2","depth":2,"next":{"title":"6.3 Load balance","level":"1.7.3","depth":2,"path":"demos/loadbalance.md","ref":"./demos/loadbalance.md","articles":[]},"previous":{"title":"6.1 Start check","level":"1.7.1","depth":2,"path":"demos/preflight-check.md","ref":"./demos/preflight-check.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/fault-tolerent-strategy.md","mtime":"2018-04-13T06:52:30.936Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1496,30 +1488,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/generic-reference.html b/books/dubbo-user-book-en/demos/generic-reference.html
index 03fee5d2..7c767d87 100644
--- a/books/dubbo-user-book-en/demos/generic-reference.html
+++ b/books/dubbo-user-book-en/demos/generic-reference.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1404,77 +1396,77 @@ <h1 id="generic-reference">Generic Reference</h1>
 <p>Generic invocation is mainly used when the client does not have API interface or model class,  all POJOs in parameters and return values are represented by <code>Map</code>.Commonly used for framework integration such as: implementing a common service testing framework, all service implementations can be invoked via <code>GenericService</code>.</p>
 <h2 id="use-generic-invocation-via-spring">Use generic invocation via Spring</h2>
 <p>Declared in the Spring configuration file <code>generic =&quot; true &quot;</code>&#xFF1A;</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>barService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">generic</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;barService&quot;</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">generic</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
 </code></pre>
 <p>In Java code, get <code>barService</code> and start generic invocation:</p>
-<pre class="language-"><code class="lang-java">GenericService barService <span class="token operator">=</span> <span class="token punctuation">(</span>GenericService<span class="token punctuation">)</span> applicationContext<span class="token punctuation">.</span><span class="token function">getBean</span><span class="token punctuation">(</span><span class="token string">&quot;barService&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-Object result <span class="token operator">=</span> barService<span class="token punctuation">.</span>$<span class="token function">invoke</span><span class="token punctuation">(</span><span class="token string">&quot;sayHello&quot;</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">{</span> <span class="token string">&quot;java.lang.String&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">{</span> <span class="token string">&quot;World&quot;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">GenericService barService = (GenericService) applicationContext.getBean(<span class="hljs-string">&quot;barService&quot;</span>);
+Object result = barService.$invoke(<span class="hljs-string">&quot;sayHello&quot;</span>, <span class="hljs-keyword">new</span> String[] { <span class="hljs-string">&quot;java.lang.String&quot;</span> }, <span class="hljs-keyword">new</span> Object[] { <span class="hljs-string">&quot;World&quot;</span> });
 </code></pre>
 <h2 id="use-generic-invocation-via-api">Use generic invocation via API</h2>
-<pre class="language-"><code class="lang-java"><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>service<span class="token punctuation">.</span>GenericService<span class="token punctuation">;</span>
-<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
-
-<span class="token comment" spellcheck="true">// reference remote service</span>
-<span class="token comment" spellcheck="true">// The instance is very heavy, which encapsulates all the registration center and service provider connection, please cache</span>
-ReferenceConfig<span class="token operator">&lt;</span>GenericService<span class="token operator">&gt;</span> reference <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ReferenceConfig</span><span class="token operator">&lt;</span>GenericService<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// weak type service interface name</span>
-reference<span class="token punctuation">.</span><span class="token function">setInterface</span><span class="token punctuation">(</span><span class="token string">&quot;com.xxx.XxxService&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  
-reference<span class="token punctuation">.</span><span class="token function">setVersion</span><span class="token punctuation">(</span><span class="token string">&quot;1.0.0&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// declared as generic service</span>
-reference<span class="token punctuation">.</span><span class="token function">setGeneric</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  
-
-<span class="token comment" spellcheck="true">// service stub type is also the com.alibaba.dubbo.rpc.service.GenericService</span>
-GenericService genericService <span class="token operator">=</span> reference<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// basic types and Date, List, Map, etc. do not need conversion, direct use them</span>
-Object result <span class="token operator">=</span> genericService<span class="token punctuation">.</span>$<span class="token function">invoke</span><span class="token punctuation">(</span><span class="token string">&quot;sayHello&quot;</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">{</span><span class="token string">&quot;java.lang.String&quot;</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">{</span><span class="token string">&quot;world&quot;</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// map POJO parameters, if the return value is POJO will automatically turn into map</span>
-Map<span class="token operator">&lt;</span>String<span class="token punctuation">,</span> Object<span class="token operator">&gt;</span> person <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token operator">&lt;</span>String<span class="token punctuation">,</span> Object<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-person<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&quot;name&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;xxx&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-person<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&quot;password&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;yyy&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// if the return value is POJO will automatically turn into map</span>
-Object result <span class="token operator">=</span> genericService<span class="token punctuation">.</span>$<span class="token function">invoke</span><span class="token punctuation">(</span><span class="token string">&quot;findPerson&quot;</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span>
-<span class="token punctuation">{</span><span class="token string">&quot;com.xxx.Person&quot;</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">Object</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">{</span>person<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
+<pre><code class="lang-java"><span class="hljs-keyword">import</span> com.alibaba.dubbo.rpc.service.GenericService;
+...
+
+<span class="hljs-comment">// reference remote service</span>
+<span class="hljs-comment">// The instance is very heavy, which encapsulates all the registration center and service provider connection, please cache</span>
+ReferenceConfig&lt;GenericService&gt; reference = <span class="hljs-keyword">new</span> ReferenceConfig&lt;GenericService&gt;();
+<span class="hljs-comment">// weak type service interface name</span>
+reference.setInterface(<span class="hljs-string">&quot;com.xxx.XxxService&quot;</span>);  
+reference.setVersion(<span class="hljs-string">&quot;1.0.0&quot;</span>);
+<span class="hljs-comment">// declared as generic service</span>
+reference.setGeneric(<span class="hljs-keyword">true</span>);  
+
+<span class="hljs-comment">// service stub type is also the com.alibaba.dubbo.rpc.service.GenericService</span>
+GenericService genericService = reference.get();
+
+<span class="hljs-comment">// basic types and Date, List, Map, etc. do not need conversion, direct use them</span>
+Object result = genericService.$invoke(<span class="hljs-string">&quot;sayHello&quot;</span>, <span class="hljs-keyword">new</span> String[] {<span class="hljs-string">&quot;java.lang.String&quot;</span>}, <span class="hljs-keyword">new</span> Object[] {<span class="hljs-string">&quot;world&quot;</span>});
+
+<span class="hljs-comment">// map POJO parameters, if the return value is POJO will automatically turn into map</span>
+Map&lt;String, Object&gt; person = <span class="hljs-keyword">new</span> HashMap&lt;String, Object&gt;();
+person.put(<span class="hljs-string">&quot;name&quot;</span>, <span class="hljs-string">&quot;xxx&quot;</span>);
+person.put(<span class="hljs-string">&quot;password&quot;</span>, <span class="hljs-string">&quot;yyy&quot;</span>);
+<span class="hljs-comment">// if the return value is POJO will automatically turn into map</span>
+Object result = genericService.$invoke(<span class="hljs-string">&quot;findPerson&quot;</span>, <span class="hljs-keyword">new</span> String[]
+{<span class="hljs-string">&quot;com.xxx.Person&quot;</span>}, <span class="hljs-keyword">new</span> Object[]{person});
+
+...
 </code></pre>
 <h2 id="further-explanation-of-generalized-types">Further explanation of generalized types</h2>
 <p>Consider POJO like this&#xFF1A;</p>
-<pre class="language-"><code class="lang-java"><span class="token keyword">package</span> com<span class="token punctuation">.</span>xxx<span class="token punctuation">;</span>
+<pre><code class="lang-java"><span class="hljs-keyword">package</span> com.xxx;
 
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">PersonImpl</span> <span class="token keyword">implements</span> <span class="token class-name">Person</span> <span class="token punctuation">{</span>
-    <span class="token keyword">private</span> String name<span class="token punctuation">;</span>
-    <span class="token keyword">private</span> String password<span class="token punctuation">;</span>
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PersonImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">Person</span> </span>{
+    <span class="hljs-keyword">private</span> String name;
+    <span class="hljs-keyword">private</span> String password;
 
-    <span class="token keyword">public</span> String <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token keyword">return</span> name<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getName</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> name;
+    }
 
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setName</span><span class="token punctuation">(</span>String name<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setName</span><span class="hljs-params">(String name)</span> </span>{
+        <span class="hljs-keyword">this</span>.name = name;
+    }
 
-    <span class="token keyword">public</span> String <span class="token function">getPassword</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token keyword">return</span> password<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> String <span class="hljs-title">getPassword</span><span class="hljs-params">()</span> </span>{
+        <span class="hljs-keyword">return</span> password;
+    }
 
-    <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPassword</span><span class="token punctuation">(</span>String password<span class="token punctuation">)</span> <span class="token punctuation">{</span>
-        <span class="token keyword">this</span><span class="token punctuation">.</span>password <span class="token operator">=</span> password<span class="token punctuation">;</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+    <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setPassword</span><span class="hljs-params">(String password)</span> </span>{
+        <span class="hljs-keyword">this</span>.password = password;
+    }
+}
 </code></pre>
 <p>The POJO data&#xFF1A;</p>
-<pre class="language-"><code class="lang-java">Person person <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">PersonImpl</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-person<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">&quot;xxx&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-person<span class="token punctuation">.</span><span class="token function">setPassword</span><span class="token punctuation">(</span><span class="token string">&quot;yyy&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">Person person = <span class="hljs-keyword">new</span> PersonImpl();
+person.setName(<span class="hljs-string">&quot;xxx&quot;</span>);
+person.setPassword(<span class="hljs-string">&quot;yyy&quot;</span>);
 </code></pre>
 <p>Data represented by <code>Map</code>&#xFF1A;</p>
-<pre class="language-"><code class="lang-java">Map<span class="token operator">&lt;</span>String<span class="token punctuation">,</span> Object<span class="token operator">&gt;</span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HashMap</span><span class="token operator">&lt;</span>String<span class="token punctuation">,</span> Object<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// Note: If the parameter type is an interface, or List lost the generic class, you can specify the type of the class attribute</span>
-map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&quot;class&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;com.xxx.PersonImpl&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&quot;name&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;xxx&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&quot;password&quot;</span><span class="token punctuation">,</span> <span class="token string">&quot;yyy&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">Map&lt;String, Object&gt; map = <span class="hljs-keyword">new</span> HashMap&lt;String, Object&gt;();
+<span class="hljs-comment">// Note: If the parameter type is an interface, or List lost the generic class, you can specify the type of the class attribute</span>
+map.put(<span class="hljs-string">&quot;class&quot;</span>, <span class="hljs-string">&quot;com.xxx.PersonImpl&quot;</span>);
+map.put(<span class="hljs-string">&quot;name&quot;</span>, <span class="hljs-string">&quot;xxx&quot;</span>);
+map.put(<span class="hljs-string">&quot;password&quot;</span>, <span class="hljs-string">&quot;yyy&quot;</span>);
 </code></pre>
 
                                 
@@ -1519,7 +1511,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.16 Generic reference","level":"1.7.16","depth":2,"next":{"title":"6.17 Generic service","level":"1.7.17","depth":2,"path":"demos/generic-service.md","ref":"./demos/generic-service.md","articles":[]},"previous":{"title":"6.15 Result cache","level":"1.7.15","depth":2,"path":"demos/result-cache.md","ref":"./demos/result-cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/generic-reference.md","mtime":"2017-12-26T02:28:31.613Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.16 Generic reference","level":"1.7.16","depth":2,"next":{"title":"6.17 Generic service","level":"1.7.17","depth":2,"path":"demos/generic-service.md","ref":"./demos/generic-service.md","articles":[]},"previous":{"title":"6.15 Result cache","level":"1.7.15","depth":2,"path":"demos/result-cache.md","ref":"./demos/result-cache.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/generic-reference.md","mtime":"2018-03-19T06:46:50.943Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1529,30 +1521,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/generic-service.html b/books/dubbo-user-book-en/demos/generic-service.html
index 237fb794..3ac6e3bf 100644
--- a/books/dubbo-user-book-en/demos/generic-service.html
+++ b/books/dubbo-user-book-en/demos/generic-service.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1403,36 +1395,36 @@ <h1>
                                 <h1 id="generic-service">Generic Service</h1>
 <p>The implementation of the generic interface is mainly used when there is no API interface and model class on the server side. All POJOs in the parameters and return values are represented by the Map and are usually used for framework integration. For example, to implement a universal remote service Mock framework, handle all service requests by implementing the GenericService interface.</p>
 <p>In Java code, implement <code>GenericService</code> interface&#xFF1A;</p>
-<pre class="language-"><code class="lang-java"><span class="token keyword">package</span> com<span class="token punctuation">.</span>foo<span class="token punctuation">;</span>
-<span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">MyGenericService</span> <span class="token keyword">implements</span> <span class="token class-name">GenericService</span> <span class="token punctuation">{</span>
-
-    <span class="token keyword">public</span> Object $<span class="token function">invoke</span><span class="token punctuation">(</span>String methodName<span class="token punctuation">,</span> String<span class="token punctuation">[</span><span class="token punctuation">]</span> parameterTypes<span class="token punctuation">,</span> Object<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> GenericException <span class="token punctuation">{</span>
-        <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">&quot;sayHello&quot;</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>methodName<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
-            <span class="token keyword">return</span> <span class="token string">&quot;Welcome &quot;</span> <span class="token operator">+</span> args<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span>
-        <span class="token punctuation">}</span>
-    <span class="token punctuation">}</span>
-<span class="token punctuation">}</span>
+<pre><code class="lang-java"><span class="hljs-keyword">package</span> com.foo;
+<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyGenericService</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">GenericService</span> </span>{
+
+    <span class="hljs-keyword">public</span> Object $invoke(String methodName, String[] parameterTypes, Object[] args) <span class="hljs-keyword">throws</span> GenericException {
+        <span class="hljs-keyword">if</span> (<span class="hljs-string">&quot;sayHello&quot;</span>.equals(methodName)) {
+            <span class="hljs-keyword">return</span> <span class="hljs-string">&quot;Welcome &quot;</span> + args[<span class="hljs-number">0</span>];
+        }
+    }
+}
 </code></pre>
 <h2 id="export-generic-implements-via-spring">Export generic implements via Spring</h2>
 <p>Declared in the Spring configuration file&#xFF1A;</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>bean</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>genericService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.MyGenericService<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.foo.BarService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">ref</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>genericService<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">bean</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&quot;genericService&quot;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&quot;com.foo.MyGenericService&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.foo.BarService&quot;</span> <span class="hljs-attr">ref</span>=<span class="hljs-string">&quot;genericService&quot;</span> /&gt;</span>
 </code></pre>
 <h2 id="export-generic-implements-via-api">Export generic implements via API</h2>
-<pre class="language-"><code class="lang-java"><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span>
-<span class="token comment" spellcheck="true">// use com.alibaba.dubbo.rpc.service.GenericService can replace all implements</span>
-GenericService xxxService <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">XxxGenericService</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// The instance is very heavy, which encapsulates all the registration center and service provider connection, please cache</span>
-ServiceConfig<span class="token operator">&lt;</span>GenericService<span class="token operator">&gt;</span> service <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ServiceConfig</span><span class="token operator">&lt;</span>GenericService<span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// weak type service interface name</span>
-service<span class="token punctuation">.</span><span class="token function">setInterface</span><span class="token punctuation">(</span><span class="token string">&quot;com.xxx.XxxService&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>  
-service<span class="token punctuation">.</span><span class="token function">setVersion</span><span class="token punctuation">(</span><span class="token string">&quot;1.0.0&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
-<span class="token comment" spellcheck="true">// point to a generic serivce instance</span>
-service<span class="token punctuation">.</span><span class="token function">setRef</span><span class="token punctuation">(</span>xxxService<span class="token punctuation">)</span><span class="token punctuation">;</span>
-
-<span class="token comment" spellcheck="true">// export service to registration center</span>
-service<span class="token punctuation">.</span><span class="token function">export</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">...
+<span class="hljs-comment">// use com.alibaba.dubbo.rpc.service.GenericService can replace all implements</span>
+GenericService xxxService = <span class="hljs-keyword">new</span> XxxGenericService();
+
+<span class="hljs-comment">// The instance is very heavy, which encapsulates all the registration center and service provider connection, please cache</span>
+ServiceConfig&lt;GenericService&gt; service = <span class="hljs-keyword">new</span> ServiceConfig&lt;GenericService&gt;();
+<span class="hljs-comment">// weak type service interface name</span>
+service.setInterface(<span class="hljs-string">&quot;com.xxx.XxxService&quot;</span>);  
+service.setVersion(<span class="hljs-string">&quot;1.0.0&quot;</span>);
+<span class="hljs-comment">// point to a generic serivce instance</span>
+service.setRef(xxxService);
+
+<span class="hljs-comment">// export service to registration center</span>
+service.export();
 </code></pre>
 
                                 
@@ -1477,7 +1469,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.17 Generic service","level":"1.7.17","depth":2,"next":{"title":"6.18 Echo service","level":"1.7.18","depth":2,"path":"demos/echo-service.md","ref":"./demos/echo-service.md","articles":[]},"previous":{"title":"6.16 Generic reference","level":"1.7.16","depth":2,"path":"demos/generic-reference.md","ref":"./demos/generic-reference.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/generic-service.md","mtime":"2017-12-26T02:28:31.613Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.17 Generic service","level":"1.7.17","depth":2,"next":{"title":"6.18 Echo service","level":"1.7.18","depth":2,"path":"demos/echo-service.md","ref":"./demos/echo-service.md","articles":[]},"previous":{"title":"6.16 Generic reference","level":"1.7.16","depth":2,"path":"demos/generic-reference.md","ref":"./demos/generic-reference.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/generic-service.md","mtime":"2018-03-19T06:46:50.943Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1487,30 +1479,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/graceful-shutdown.html b/books/dubbo-user-book-en/demos/graceful-shutdown.html
index 38be69f1..360491fd 100644
--- a/books/dubbo-user-book-en/demos/graceful-shutdown.html
+++ b/books/dubbo-user-book-en/demos/graceful-shutdown.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -68,7 +60,7 @@
     <link rel="next" href="hostname-binding.html" />
     
     
-    <link rel="prev" href="service-downgrade.md" />
+    <link rel="prev" href="service-donwngrade.html" />
     
 
     </head>
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1415,11 +1407,11 @@ <h3 id="service-consumer">Service consumer</h3>
 </ul>
 <h2 id="configuration-shutdown-wait-time">Configuration shutdown wait time</h2>
 <p>Set graceful shutdown timeout, the default timeout is 10 seconds, if the overtime is forced to close.</p>
-<pre class="language-"><code class="lang-properties"><span class="token comment" spellcheck="true"># dubbo.properties</span>
-<span class="token attr-name">dubbo.service.shutdown.wait</span><span class="token punctuation">=</span><span class="token attr-value">15000</span>
+<pre><code class="lang-properties"># dubbo.properties
+dubbo.service.shutdown.wait=15000
 </code></pre>
 <p>If ShutdownHook does not take effect, you can call it yourself, <strong>in tomcat, it is recommended by extending the ContextListener and call the following code for graceful shutdown</strong>&#xFF1A;</p>
-<pre class="language-"><code class="lang-java">ProtocolConfig<span class="token punctuation">.</span><span class="token function">destroyAll</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
+<pre><code class="lang-java">ProtocolConfig.destroyAll();
 </code></pre>
 
                                 
@@ -1448,7 +1440,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
 
             
                 
-                <a href="service-downgrade.md" class="navigation navigation-prev " aria-label="Previous page: 6.35 Service downgrade">
+                <a href="service-donwngrade.html" class="navigation navigation-prev " aria-label="Previous page: 6.35 Service downgrade">
                     <i class="fa fa-angle-left"></i>
                 </a>
                 
@@ -1464,7 +1456,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.36 Graceful shutdown","level":"1.7.36","depth":2,"next":{"title":"6.37 Hostname binding ","level":"1.7.37","depth":2,"path":"demos/hostname-binding.md","ref":"./demos/hostname-binding.md","articles":[]},"previous":{"title":"6.35 Service downgrade","level":"1.7.35","depth":2,"path":"demos/service-downgrade.md","ref":"./demos/service-downgrade.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/graceful-shutdown.md","mtime":"2017-12-26T02:28:31.614Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.36 Graceful shutdown","level":"1.7.36","depth":2,"next":{"title":"6.37 Hostname binding ","level":"1.7.37","depth":2,"path":"demos/hostname-binding.md","ref":"./demos/hostname-binding.md","articles":[]},"previous":{"title":"6.35 Service downgrade","level":"1.7.35","depth":2,"path":"demos/service-donwngrade.md","ref":"./demos/service-donwngrade.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/graceful-shutdown.md","mtime":"2018-03-19T06:46:50.944Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1474,30 +1466,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/group-merger.html b/books/dubbo-user-book-en/demos/group-merger.html
index d42c6b00..8f6ee914 100644
--- a/books/dubbo-user-book-en/demos/group-merger.html
+++ b/books/dubbo-user-book-en/demos/group-merger.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1402,39 +1394,39 @@ <h1>
                                 
                                 <h1 id="group-merger">Group Merger</h1>
 <p>According to the group to invoke server and return the merge result <sup><a href="#fn_1" id="reffn_1">1</a></sup>, such as the menu service, the same interface, but there are a variety of implementations, using group distinction, consumers call each group and get the results, the merger can merge the resules, so that you can achieve aggregation Menu Item.</p>
-<p>Related code can refer to <a href="https://github.com/alibaba/dubbo/tree/master/dubbo-test/dubbo-test-examples/src/main/java/com/alibaba/dubbo/examples/merge" target="_blank">dubbo project example</a></p>
+<p>Related code can refer to <a href="https://github.com/apache/incubator-dubbo/tree/master/dubbo-test/dubbo-test-examples/src/main/java/com/alibaba/dubbo/examples/merge" target="_blank">dubbo project example</a></p>
 <h2 id="configuration">Configuration</h2>
 <p>Merge all groups</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.MenuService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>*<span class="token punctuation">&quot;</span></span> <span class="token attr-name">merger</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.xxx.MenuService&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;*&quot;</span> <span class="hljs-attr">merger</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
 </code></pre>
 <p>Merge the specified group</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.MenuService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>aaa,bbb<span class="token punctuation">&quot;</span></span> <span class="token attr-name">merger</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.xxx.MenuService&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;aaa,bbb&quot;</span> <span class="hljs-attr">merger</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
 </code></pre>
 <p>The specified method to merge the results, other unspecified methods, will only call one group</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.MenuService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>*<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>getMenuItems<span class="token punctuation">&quot;</span></span> <span class="token attr-name">merger</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.xxx.MenuService&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;*&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;getMenuItems&quot;</span> <span class="hljs-attr">merger</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
 <p>The Specified a method does not merge the results, others merge the results</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.MenuService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>*<span class="token punctuation">&quot;</span></span> <span class="token attr-name">merger</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>getMenuItems<span class="token punctuation">&quot;</span></span> <span class="token attr-name">merger</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>false<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.xxx.MenuService&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;*&quot;</span> <span class="hljs-attr">merger</span>=<span class="hljs-string">&quot;true&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;getMenuItems&quot;</span> <span class="hljs-attr">merger</span>=<span class="hljs-string">&quot;false&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
 <p>Specify the merge strategy, the default according to the type of return value automatically match, if the same type has two mergers, you need to specify the name of the merger<sup><a href="#fn_2" id="reffn_2">2</a></sup></p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.MenuService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>*<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>getMenuItems<span class="token punctuation">&quot;</span></span> <span class="token attr-name">merger</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>mymerge<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.xxx.MenuService&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;*&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;getMenuItems&quot;</span> <span class="hljs-attr">merger</span>=<span class="hljs-string">&quot;mymerge&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
 <p>Specify the merge method, it will call the return type&apos;s method for merging, the merging method parameter type must be the return type</p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>com.xxx.MenuService<span class="token punctuation">&quot;</span></span> <span class="token attr-name">group</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>*<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>method</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>getMenuItems<span class="token punctuation">&quot;</span></span> <span class="token attr-name">merger</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>.addAll<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
-<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span><span class="token namespace">dubbo:</span>service</span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;com.xxx.MenuService&quot;</span> <span class="hljs-attr">group</span>=<span class="hljs-string">&quot;*&quot;</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:method</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;getMenuItems&quot;</span> <span class="hljs-attr">merger</span>=<span class="hljs-string">&quot;.addAll&quot;</span> /&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">dubbo:service</span>&gt;</span>
 </code></pre>
 <blockquote id="fn_1">
 <sup>1</sup>. since <code>2.1.0</code> began to support<a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
 </blockquote>
 <blockquote id="fn_2">
-<sup>2</sup>. See also&#xFF1A;<a href="https://dubbo.gitbooks.io/dubbo-dev-book/content/impls/merger.html" target="_blank">merger extensions</a><a href="#reffn_2" title="Jump back to footnote [2] in the text."> &#x21A9;</a>
+<sup>2</sup>. See also&#xFF1A;<a href="http://dubbo.apache.org/books/dubbo-user-book-en/demos/group-merger.html" target="_blank">merger extensions</a><a href="#reffn_2" title="Jump back to footnote [2] in the text."> &#x21A9;</a>
 </blockquote>
 
                                 
@@ -1479,7 +1471,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.13 Group merger","level":"1.7.13","depth":2,"next":{"title":"6.14 Parameter validation","level":"1.7.14","depth":2,"path":"demos/parameter-validation.md","ref":"./demos/parameter-validation.md","articles":[]},"previous":{"title":"6.12 Multi-versions","level":"1.7.12","depth":2,"path":"demos/multi-versions.md","ref":"./demos/multi-versions.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/group-merger.md","mtime":"2017-12-26T02:28:31.614Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.13 Group merger","level":"1.7.13","depth":2,"next":{"title":"6.14 Parameter validation","level":"1.7.14","depth":2,"path":"demos/parameter-validation.md","ref":"./demos/parameter-validation.md","articles":[]},"previous":{"title":"6.12 Multi-versions","level":"1.7.12","depth":2,"path":"demos/multi-versions.md","ref":"./demos/multi-versions.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/group-merger.md","mtime":"2018-04-13T06:52:30.937Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1489,30 +1481,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/hostname-binding.html b/books/dubbo-user-book-en/demos/hostname-binding.html
index ff03495f..5829d60d 100644
--- a/books/dubbo-user-book-en/demos/hostname-binding.html
+++ b/books/dubbo-user-book-en/demos/hostname-binding.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1411,14 +1403,14 @@ <h2 id="host-configuration">Host configuration</h2>
 <p>Registered address if it is not correct, such as the need to register public address, you can do this:</p>
 <ol>
 <li><p>edit <code>/etc/hosts</code> : add machinename and public ip, such as:</p>
-<pre class="language-"><code> test1 205.182.23.201
+<pre><code> test1 205.182.23.201
 </code></pre></li>
 <li><p>in <code>dubbo.xml</code> add host address configuration:</p>
-<pre class="language-"><code class="lang-xml"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">host</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>205.182.23.201<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">host</span>=<span class="hljs-string">&quot;205.182.23.201&quot;</span>&gt;</span>
 </code></pre>
 </li>
 <li><p>or config that in <code>dubbo.properties</code>:</p>
-<pre class="language-"><code class="lang-properties"><span class="token attr-name">dubbo.protocol.host</span><span class="token punctuation">=</span><span class="token attr-value">205.182.23.201</span>
+<pre><code class="lang-properties">dubbo.protocol.host=205.182.23.201
 </code></pre>
 </li>
 </ol>
@@ -1465,11 +1457,11 @@ <h2 id="port-configuration">Port configuration</h2>
 <p>You can configure the port as follows:</p>
 <ol>
 <li><p>in <code>dubbo.xml</code> add port configuration:</p>
-<pre class="language-"><code class="lang-xml"> <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">port</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>20880<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
+<pre><code class="lang-xml"> <span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;dubbo&quot;</span> <span class="hljs-attr">port</span>=<span class="hljs-string">&quot;20880&quot;</span>&gt;</span>
 </code></pre>
 </li>
 <li><p>or config that in <code>dubbo.properties</code>:</p>
-<pre class="language-"><code class="lang-properties"><span class="token attr-name"> dubbo.protocol.dubbo.port</span><span class="token punctuation">=</span><span class="token attr-value">20880</span>
+<pre><code class="lang-properties"> dubbo.protocol.dubbo.port=20880
 </code></pre>
 </li>
 </ol>
@@ -1516,7 +1508,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.37 Hostname binding ","level":"1.7.37","depth":2,"next":{"title":"6.38 Logger strategy","level":"1.7.38","depth":2,"path":"demos/logger-strategy.md","ref":"./demos/logger-strategy.md","articles":[]},"previous":{"title":"6.36 Graceful shutdown","level":"1.7.36","depth":2,"path":"demos/graceful-shutdown.md","ref":"./demos/graceful-shutdown.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/hostname-binding.md","mtime":"2017-12-26T02:28:31.615Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.37 Hostname binding ","level":"1.7.37","depth":2,"next":{"title":"6.38 Logger strategy","level":"1.7.38","depth":2,"path":"demos/logger-strategy.md","ref":"./demos/logger-strategy.md","articles":[]},"previous":{"title":"6.36 Graceful shutdown","level":"1.7.36","depth":2,"path":"demos/graceful-shutdown.md","ref":"./demos/graceful-shutdown.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/hostname-binding.md","mtime":"2018-03-19T06:46:50.944Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1526,30 +1518,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/index.html b/books/dubbo-user-book-en/demos/index.html
index 2c417b6d..ea2d367a 100644
--- a/books/dubbo-user-book-en/demos/index.html
+++ b/books/dubbo-user-book-en/demos/index.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1444,7 +1436,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6 Demos","level":"1.7","depth":1,"next":{"title":"6.1 Start check","level":"1.7.1","depth":2,"path":"demos/preflight-check.md","ref":"./demos/preflight-check.md","articles":[]},"previous":{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"path":"configuration/annotation.md","ref":"./configuration/annotation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/index.md","mtime":"2017-12-26T02:28:31.615Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6 Demos","level":"1.7","depth":1,"next":{"title":"6.1 Start check","level":"1.7.1","depth":2,"path":"demos/preflight-check.md","ref":"./demos/preflight-check.md","articles":[]},"previous":{"title":"5.4 Annotation configuration","level":"1.6.4","depth":2,"path":"configuration/annotation.md","ref":"./configuration/annotation.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/index.md","mtime":"2018-03-19T06:46:50.945Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1454,30 +1446,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/introduction.html b/books/dubbo-user-book-en/demos/introduction.html
new file mode 100644
index 00000000..522aceb2
--- /dev/null
+++ b/books/dubbo-user-book-en/demos/introduction.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html lang="en-US">
+  <head>
+    <meta charset="UTF-8">
+    <title>Apache Dubbo (incubating)</title>
+<!-- Begin Jekyll SEO tag v2.3.0 -->
+<title>Apache Dubbo (incubating) | Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.</title>
+<meta property="og:title" content="Apache Dubbo (incubating)" />
+<meta property="og:locale" content="en_US" />
+<meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework." />
+<meta property="og:site_name" content="Apache Dubbo (incubating)" />
+<script type="application/ld+json">
+{"name":null,"description":"Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.","author":null,"@type":"WebPage","url":"/books/dubbo-user-book-en/demos/introduction.html","publisher":null,"image":null,"headline":"Apache Dubbo (incubating)","dateModified":null,"datePublished":null,"sameAs":null,"mainEntityOfPage":null,"@context":"http://schema.org"}</script>
+<!-- End Jekyll SEO tag -->
+
+    <meta name="description" content="Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework."/>
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <meta name="theme-color" content="#157878">
+    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
+    <link rel="stylesheet" href="/assets/css/style.css?v=5e4e78ddaf4ea9e9a1a5bb0ded1eae4ac241ca64">
+      <!--<script>-->
+      <!--var _hmt = _hmt || [];-->
+      <!--(function() {-->
+      <!--var hm = document.createElement("script");-->
+      <!--hm.src = "https://hm.baidu.com/hm.js?5d37fba14b64e6bc8e0be39b4a08a59d";-->
+      <!--var s = document.getElementsByTagName("script")[0]; -->
+      <!--s.parentNode.insertBefore(hm, s);-->
+      <!--})();-->
+      <!--</script>-->
+  </head>
+  <body>
+    <section class="page-header">
+      <h1 class="project-name"><a href="http://www.apache.org"><img src="images//asf-feather.svg" title="Apache Software Foundation" alt="Apache Software Foundation" style="width: 50px;vertical-align: bottom;" /></a>Apache Dubbo (incubating)</h1>
+      <h2 class="project-tagline">Apache Dubbo™ (incubating) is a high-performance, java based, open source RPC framework.</h2>
+      
+        <a href="https://github.com/apache/incubator-dubbo" class="btn">View on GitHub</a>
+      
+      
+    </section>
+
+    <section class="main-content">
+      <blockquote>
+  <p><img src="../sources/images/check.gif" alt="warning" />To complete run, please see:<a href="quickstart.md">Quickstart</a>, here just lists the configuration of various scenarios
+<img src="../sources/images/check.gif" alt="warning" />The following examples are all based on Spring configuration:<a href="../configuration/xml.md">Xml configuration</a> for reference, if you do not want to use Spring, but want to be use it via the directly API, please see:<a href="../configuration/api.md">API configuration</a></p>
+</blockquote>
+
+
+      <footer class="site-footer">
+          <span class="site-footer-credits">Copyright © 2018 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation.</span>
+      </footer>
+    </section>
+
+    
+      <script type="text/javascript">
+        (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-112489517-1', 'auto');
+        ga('send', 'pageview');
+      </script>
+    
+  </body>
+</html>
diff --git a/books/dubbo-user-book-en/demos/lazy-connect.html b/books/dubbo-user-book-en/demos/lazy-connect.html
index 7b7b199f..daf483f4 100644
--- a/books/dubbo-user-book-en/demos/lazy-connect.html
+++ b/books/dubbo-user-book-en/demos/lazy-connect.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1402,7 +1394,7 @@ <h1>
                                 
                                 <h1 id="lazy-connect">Lazy Connect</h1>
 <p>Lazy connect can reduce the number of keep-alive connections. When a call is initiated, create a keep-alive connection.<sup><a href="#fn_1" id="reffn_1">1</a></sup></p>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>protocol</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>dubbo<span class="token punctuation">&quot;</span></span> <span class="token attr-name">lazy</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>true<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:protocol</span> <span class="hljs-attr">name</span>=<span class="hljs-string">&quot;dubbo&quot;</span> <span class="hljs-attr">lazy</span>=<span class="hljs-string">&quot;true&quot;</span> /&gt;</span>
 </code></pre>
 <blockquote id="fn_1">
 <sup>1</sup>. Note: This configuration takes effect only for dubbo protocols that use keep-alive connections.<a href="#reffn_1" title="Jump back to footnote [1] in the text."> &#x21A9;</a>
@@ -1450,7 +1442,7 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script>
         var gitbook = gitbook || [];
         gitbook.push(function() {
-            gitbook.page.hasChanged({"page":{"title":"6.30 Lazy connect","level":"1.7.30","depth":2,"next":{"title":"6.31 Stickness connections","level":"1.7.31","depth":2,"path":"demos/stickiness.md","ref":"./demos/stickiness.md","articles":[]},"previous":{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"path":"demos/config-connections.md","ref":"./demos/config-connections.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":["disqus","github","editlink","prism","-highlight","baidu","splitter","sitemap"],"pluginsConfig":{"prism":{},"disqus":{"useIdentifier":false,"shortName":"webpack-handbook"},"github":{"url":"https://github.com/zhaoda/webpack-handbook"},"editlink":{"label":"edit this page","multilingual":false,"base":"https://github.com/zhaoda/webpack-handbook/blob/master/content"},"splitter":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"sitemap":{"hostname":"http://zhaoda.net/"},"baidu":{"token":"a9787f0ab45d5e237bab522431d0a7ec"},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/lazy-connect.md","mtime":"2017-12-26T02:28:31.616Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2017-12-26T02:30:10.822Z"},"basePath":"..","book":{"language":""}});
+            gitbook.page.hasChanged({"page":{"title":"6.30 Lazy connect","level":"1.7.30","depth":2,"next":{"title":"6.31 Stickness connections","level":"1.7.31","depth":2,"path":"demos/stickiness.md","ref":"./demos/stickiness.md","articles":[]},"previous":{"title":"6.29 Connections limitation","level":"1.7.29","depth":2,"path":"demos/config-connections.md","ref":"./demos/config-connections.md","articles":[]},"dir":"ltr"},"config":{"gitbook":"*","theme":"default","variables":{},"plugins":[],"pluginsConfig":{"highlight":{},"search":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"fontsettings":{"theme":"white","family":"sans","size":2},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"}},"file":{"path":"demos/lazy-connect.md","mtime":"2018-03-19T06:46:50.945Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-06-07T06:52:57.808Z"},"basePath":"..","book":{"language":""}});
         });
     </script>
 </div>
@@ -1460,30 +1452,6 @@ <h1 class="search-results-title">No results matching "<span class='search-query'
     <script src="../gitbook/theme.js"></script>
     
         
-        <script src="https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.16.1/URI.min.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-disqus/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-github/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-editlink/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-baidu/plugin.js"></script>
-        
-    
-        
-        <script src="../gitbook/gitbook-plugin-splitter/splitter.js"></script>
-        
-    
-        
         <script src="../gitbook/gitbook-plugin-search/search-engine.js"></script>
         
     
diff --git a/books/dubbo-user-book-en/demos/loadbalance.html b/books/dubbo-user-book-en/demos/loadbalance.html
index e8df371e..7a31c302 100644
--- a/books/dubbo-user-book-en/demos/loadbalance.html
+++ b/books/dubbo-user-book-en/demos/loadbalance.html
@@ -17,15 +17,7 @@
     
             
                 
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-disqus/plugin.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-prism/prism.css">
-                
-            
-                
-                <link rel="stylesheet" href="../gitbook/gitbook-plugin-splitter/splitter.css">
+                <link rel="stylesheet" href="../gitbook/gitbook-plugin-highlight/website.css">
                 
             
                 
@@ -115,7 +107,7 @@
                 <a href="../preface/">
             
                     
-                    1 Index
+                    1 Preface
             
                 </a>
             
@@ -747,9 +739,9 @@
             
         </li>
     
-        <li class="chapter " data-level="1.7.35" data-path="service-downgrade.md">
+        <li class="chapter " data-level="1.7.35" data-path="service-donwngrade.html">
             
-                <span>
+                <a href="service-donwngrade.html">
             
                     
                     6.35 Service downgrade
@@ -1402,7 +1394,7 @@ <h1>
                                 
                                 <h1 id="loadbalance">LoadBalance</h1>
 <p>Dubbo offers a number of balancing strategies for cluster load balancing, which defaults to <code>random</code>.</p>
-<p>You can extend the load balancing strategy by yourself, see:<a href="https://dubbo.gitbooks.io/dubbo-dev-book/content/impls/load-balance.html" target="_blank">LoadBalance extension</a></p>
+<p>You can extend the load balancing strategy by yourself, see:<a href="http://dubbo.apache.org/books/dubbo-dev-book-en/impls/load-balance.html" target="_blank">LoadBalance extension</a></p>
 <h2 id="loadbalance-strategy">LoadBalance strategy</h2>
 <h3 id="random-loadbalance">Random LoadBalance</h3>
 <ul>
@@ -1424,26 +1416,26 @@ <h3 id="consistenthash-loadbalance">ConsistentHash LoadBalance</h3>
 <li><strong>ConsistentHash</strong>, the same parameters of the request is always sent to the same provider.</li>
 <li>When a provider fails, the original request to the provider, based on the virtual node algorithm, averages to other providers, does not cause drastic changes.</li>
 <li>Algorithm reference&#xFF1A;<a href="http://en.wikipedia.org/wiki/Consistent_hashing" target="_blank">http://en.wikipedia.org/wiki/Consistent_hashing</a></li>
-<li>By default only the first parameter Hash, if you want to modify, please configure <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>parameter</span> <span class="token attr-name">key</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>hash.arguments<span class="token punctuation">&quot;</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>0,1<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code></li>
-<li>By default 160 virtual nodes, if you want to modify, please configure <code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>parameter</span> <span class="token attr-name">key</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>hash.nodes<span class="token punctuation">&quot;</span></span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>320<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span></code></li>
+<li>By default only the first parameter Hash, if you want to modify, please configure <code>&lt;dubbo:parameter key=&quot;hash.arguments&quot; value=&quot;0,1&quot; /&gt;</code></li>
+<li>By default 160 virtual nodes, if you want to modify, please configure <code>&lt;dubbo:parameter key=&quot;hash.nodes&quot; value=&quot;320&quot; /&gt;</code></li>
 </ul>
 <p>See the algorithm at <a href="http://en.wikipedia.org/wiki/Consistent_hashing" target="_blank">http://en.wikipedia.org/wiki/Consistent_hashing</a></p>
 <h2 id="configuration">Configuration</h2>
 <h3 id="server-service-level">Server service level</h3>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>...<span class="token punctuation">&quot;</span></span> <span class="token attr-name">loadbalance</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>roundrobin<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:service</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;...&quot;</span> <span class="hljs-attr">loadbalance</span>=<span class="hljs-string">&quot;roundrobin&quot;</span> /&gt;</span>
 </code></pre>
 <h3 id="client-service-level">Client service level</h3>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>reference</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>...<span class="token punctuation">&quot;</span></span> <span class="token attr-name">loadbalance</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>roundrobin<span class="token punctuation">&quot;</span></span> <span class="token punctuation">/&gt;</span></span>
+<pre><code class="lang-xml"><span class="hljs-tag">&lt;<span class="hljs-name">dubbo:reference</span> <span class="hljs-attr">interface</span>=<span class="hljs-string">&quot;...&quot;</span> <span class="hljs-attr">loadbalance</span>=<span class="hljs-string">&quot;roundrobin&quot;</span> /&gt;</span>
 </code></pre>
 <h3 id="server-method-level">Server method level</h3>
-<pre class="language-"><code class="lang-xml"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span><span class="token namespace">dubbo:</span>service</span> <span class="token attr-name">interface</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">&quot;</span>...<span class="token punctuation">&quot;</span></span><span class="token punctuation">&gt;</span></span>
-    <span class="token tag"><span class="token tag"><span class="token pu

  (This diff was greater than 5MB in size, and has been truncated...)


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org